X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-psi;a=blobdiff_plain;f=src%2Fparser.h;h=820f44528f9aeae8038a7c1b671a8758738cc591;hp=350213c940d88a133c007b91886bd4a25539cf90;hb=c5f1eb3b7e969dde73a6e485a19d5a2766651970;hpb=29137b5f19713219a1b9b5fdf54ad94a34d6fde0 diff --git a/src/parser.h b/src/parser.h index 350213c..820f445 100644 --- a/src/parser.h +++ b/src/parser.h @@ -891,6 +891,7 @@ typedef struct let_func { char *name; impl_var *var; impl_arg *arg; + set_values *callback; } let_func; static inline let_func *init_let_func(token_t type, const char *name, impl_var *var) { @@ -1067,6 +1068,34 @@ static inline void free_set_value(set_value *val) { free(val); } +typedef struct set_values { + set_value **vals; + size_t count; +} set_values; + +static inline set_values *init_set_values(set_value *val) { + set_values *vals = calloc(1, sizeof(*vals)); + if (val) { + vals->count = 1; + vals->vals = calloc(1, sizeof(val)); + vals->vals[0] = val; + } + return vals; +} + +static inline set_values *add_set_value(set_values *vals, set_value *val) { + vals->vals = realloc(vals->vals, ++vals->count * sizeof(val)); + vals->vals[vals->count-1] = val; + return vals; +} + +static inline void free_set_values(set_values *vals) { + if (vals->vals) { + free(vals->vals); + } + free(vals); +} + typedef struct set_stmt { impl_var *var; set_value *val;