flush
[m6w6/ext-psi] / src / parser.h
index 9709a1d81ee854f4f072f8fd767d4ebbde5ba325..fe3ff8e8759b9aacbd7f21ce1b5b307438abfa13 100644 (file)
@@ -92,13 +92,15 @@ static void free_decl_typedefs(decl_typedefs *defs) {
 typedef struct decl_var {
        char *name;
        unsigned pointer_level;
+       unsigned array_size;
        struct decl_arg *arg;
 } decl_var;
 
-static inline decl_var *init_decl_var(char *name, unsigned pl) {
+static inline decl_var *init_decl_var(char *name, unsigned pl, unsigned as) {
        decl_var *v = malloc(sizeof(*v));
        v->name = (char *) strdup((const char *) name);
        v->pointer_level = pl;
+       v->array_size = as;
        return v;
 }
 
@@ -403,12 +405,14 @@ static inline void free_impl_func(impl_func *f) {
 typedef struct let_func {
        token_t type;
        char *name;
+       size_t size;
 } let_func;
 
-static inline let_func *init_let_func(token_t type, char *name) {
+static inline let_func *init_let_func(token_t type, char *name, size_t size) {
        let_func *func = malloc(sizeof(*func));
        func->type = type;
-       func->name = (char *) strdup((const char *) name);
+       func->name = strdup(name);
+       func->size = size;
        return func;
 }
 
@@ -459,7 +463,9 @@ static inline let_stmt *init_let_stmt(decl_var *var, let_value *val) {
 
 static inline void free_let_stmt(let_stmt *stmt) {
        free_decl_var(stmt->var);
-       free_let_value(stmt->val);
+       if (stmt->val) {
+               free_let_value(stmt->val);
+       }
        free(stmt);
 }