From 9201d978d0c4d4f4bdffd4e686ef116d7fdaa982 Mon Sep 17 00:00:00 2001 From: czjstmax Date: Sun, 21 Dec 2025 21:24:46 +0100 Subject: Fixed `#include` directives for `heads/` folder in `rbc.c` Signed-off-by: czjstmax --- src/heads/freeast.h | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 src/heads/freeast.h (limited to 'src/heads/freeast.h') 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 + +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 -- cgit v1.3.1