diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/datatype.h | 7 | ||||
-rw-r--r-- | include/expression.h | 2 |
2 files changed, 6 insertions, 3 deletions
diff --git a/include/datatype.h b/include/datatype.h index 14ece282..23f45ab7 100644 --- a/include/datatype.h +++ b/include/datatype.h @@ -117,12 +117,10 @@ struct expr; * * @DTYPE_F_ALLOC: datatype is dynamically allocated * @DTYPE_F_PREFIX: preferred representation for ranges is a prefix - * @DTYPE_F_CLONE: this is an instance from original datatype */ enum datatype_flags { DTYPE_F_ALLOC = (1 << 0), DTYPE_F_PREFIX = (1 << 1), - DTYPE_F_CLONE = (1 << 2), }; /** @@ -140,6 +138,7 @@ enum datatype_flags { * @print: function to print a constant of this type * @parse: function to parse a symbol and return an expression * @sym_tbl: symbol table for this type + * @refcnt: reference counter (only for DTYPE_F_ALLOC) */ struct datatype { uint32_t type; @@ -158,10 +157,14 @@ struct datatype { struct error_record *(*parse)(const struct expr *sym, struct expr **res); const struct symbol_table *sym_tbl; + unsigned int refcnt; }; extern const struct datatype *datatype_lookup(enum datatypes type); extern const struct datatype *datatype_lookup_byname(const char *name); +extern struct datatype *datatype_get(const struct datatype *dtype); +extern void datatype_set(struct expr *expr, const struct datatype *dtype); +extern void datatype_free(const struct datatype *dtype); extern struct error_record *symbol_parse(const struct expr *sym, struct expr **res); diff --git a/include/expression.h b/include/expression.h index ef412554..4de53682 100644 --- a/include/expression.h +++ b/include/expression.h @@ -415,7 +415,7 @@ static inline void symbol_expr_set_type(struct expr *expr, const struct datatype *dtype) { if (expr->etype == EXPR_SYMBOL) - expr->dtype = dtype; + datatype_set(expr, dtype); } struct expr *variable_expr_alloc(const struct location *loc, |