summaryrefslogtreecommitdiff
path: root/src/headers/freeast.h
blob: 544d183f2408cd2cf191e0c3c8186fa65eb2ff72 (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
#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