diff options
| author | czjstmax <jstmaxlol@disroot.org> | 2025-12-21 21:24:46 +0100 |
|---|---|---|
| committer | czjstmax <jstmaxlol@disroot.org> | 2025-12-21 21:24:46 +0100 |
| commit | 9201d978d0c4d4f4bdffd4e686ef116d7fdaa982 (patch) | |
| tree | d78d98f3b157d39b2353165445b4a47569658da0 /src/heads/freeast.h | |
| parent | 05033cc80fc9839e402106ae60e92b69266d1595 (diff) | |
Fixed `#include` directives for `heads/` folder in `rbc.c`
Signed-off-by: czjstmax <jstmaxlol@disroot.org>
Diffstat (limited to 'src/heads/freeast.h')
| -rw-r--r-- | src/heads/freeast.h | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/src/heads/freeast.h b/src/heads/freeast.h new file mode 100644 index 0000000..544d183 --- /dev/null +++ b/src/heads/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 |