+typedef struct decl_typedef {
+ char *alias;
+ decl_type *type;
+} decl_typedef;
+
+static inline decl_typedef *init_decl_typedef(char *name, decl_type *type) {
+ decl_typedef *t = malloc(sizeof(*t));
+ t->alias = strdup(name);
+ t->type = type;
+ return t;
+}
+
+static inline void free_decl_typedef(decl_typedef *t) {
+ free(t->alias);
+ free_decl_type(t->type);
+ free(t);
+}
+
+typedef struct decl_typedefs {
+ size_t count;
+ decl_typedef **list;
+} decl_typedefs;
+
+static decl_typedefs *add_decl_typedef(decl_typedefs *defs, decl_typedef *def) {
+ if (!defs) {
+ defs = calloc(1, sizeof(*defs));
+ }
+ defs->list = realloc(defs->list, ++defs->count * sizeof(*defs->list));
+ defs->list[defs->count-1] = def;
+ return defs;
+}
+
+static void free_decl_typedefs(decl_typedefs *defs) {
+ size_t i;
+
+ for (i = 0; i < defs->count; ++i) {
+ free_decl_typedef(defs->list[i]);
+ }
+ free(defs->list);
+ free(defs);
+}
+