diff options
| author | czjstmax <jstmaxlol@disroot.org> | 2025-12-19 23:32:31 +0100 |
|---|---|---|
| committer | czjstmax <jstmaxlol@disroot.org> | 2025-12-19 23:32:31 +0100 |
| commit | 1c11d915a68e60bd191d43e348d56b9eab71b107 (patch) | |
| tree | 0b79d8ce3f47bc7ead2143e6f6e10e3f7df9075e /src/headers/freeast.h | |
| parent | fe0479de0c0305eafb1d3aa1456850af9e3b4fca (diff) | |
Created `src` dir for code, added Makefile
Diffstat (limited to 'src/headers/freeast.h')
| -rw-r--r-- | src/headers/freeast.h | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/src/headers/freeast.h b/src/headers/freeast.h new file mode 100644 index 0000000..544d183 --- /dev/null +++ b/src/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 |