flush
[m6w6/ext-psi] / src / parser.h
index ce74067db65a94d4ba3f6c9f458a1fda5a3504b8..4e5e0648351d4abcb8eb53b26186635b31dfb341 100644 (file)
@@ -70,7 +70,7 @@ typedef struct decl_typedefs {
        decl_typedef **list;
 } decl_typedefs;
 
-static decl_typedefs *add_decl_typedef(decl_typedefs *defs, decl_typedef *def) {
+static inline decl_typedefs *add_decl_typedef(decl_typedefs *defs, decl_typedef *def) {
        if (!defs) {
                defs = calloc(1, sizeof(*defs));
        }
@@ -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;
 }
 
@@ -459,7 +461,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);
 }
 
@@ -681,7 +685,7 @@ typedef struct impls {
        impl **list;
 } impls;
 
-static impls *add_impl(impls *impls, impl *impl) {
+static inline impls *add_impl(impls *impls, impl *impl) {
        if (!impls) {
                impls = calloc(1, sizeof(*impls));
        }