blob: c52e4e88f27c3c855ec0ea3ca07134dfe7fe73ee (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
#ifndef CRBC_FREEAST_H
#define CRBC_FREEAST_H
// 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.intLiteral);
break;
case EXPR_BOOL:
free(expr->as.boolLiteral);
break;
case EXPR_CHAR:
free(expr->as.charLiteral);
break;
case EXPR_STRING:
free(expr->as.stringLiteral);
break;
case EXPR_IDENT:
free(expr->as.ident);
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(decl->as.var);
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
|