diff options
| author | czjstmax <jstmaxlol@disroot.org> | 2025-12-19 23:09:12 +0100 |
|---|---|---|
| committer | czjstmax <jstmaxlol@disroot.org> | 2025-12-19 23:09:12 +0100 |
| commit | fe0479de0c0305eafb1d3aa1456850af9e3b4fca (patch) | |
| tree | 6fb8cf53d09f3d2dfa95f6878f4c8c5e8354219a /headers/freeast.h | |
| parent | bfc14c6903a0d082286d02ec2f99856da1bfb719 (diff) | |
Development started, cumulative commit #1
Diffstat (limited to 'headers/freeast.h')
| -rw-r--r-- | headers/freeast.h | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/headers/freeast.h b/headers/freeast.h new file mode 100644 index 0000000..544d183 --- /dev/null +++ b/headers/freeast.h @@ -0,0 +1,70 @@ +#ifndef CRBC_FREEAST +#define CRBC_FREEAST + +// Free memory functions, utilize after having used the AST + +#include <stdlib.h> + +void FreeExpr(Expr *expr) +{ + if (!expr) return; + + switch (expr->kind) { + case EXPR_INT: + free(expr->as); + break; + case EXPR_BOOL: + break; + case EXPR_CHAR: + break; + case EXPR_STRING: + break; + case EXPR_IDENT: + break; + default: + break; + } + + free(expr); +} + +static inline void FreeDeclVar(DeclVar *var) +{ + if (!var) return; + + free(var->ident); + free(var->type); + + free(var); +} + +void FreeDecl(Decl *decl) +{ + if (!decl) return; + + switch (decl->kind) { + case DECL_VAR: + FreeDeclVar((DeclVar *)decl->as); + break; + + case DECL_FUNC: + /* FreeDeclFunc(...) later */ + break; + + case DECL_TYPE_STRUCT: + /* FreeDeclTypeStruct(...) later */ + break; + + case DECL_TYPE_ENUM: + /* ... */ + break; + + case DECL_TYPE_UNION: + /* ... */ + break; + } + + free(decl); +} + +#endif |