-
Notifications
You must be signed in to change notification settings - Fork 0
/
llvm_codegen_visitor.h
50 lines (43 loc) · 2.65 KB
/
llvm_codegen_visitor.h
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
#ifndef LLVM_CODEGEN_VISITOR_H
#define LLVM_CODEGEN_VISITOR_H
#include "ast.h"
#define TAB " "
#define PRINT_TYPE(t) if (t == VOID) printf("void"); \
else printf("i%d", _get_type_size(t))
#define PRINT_VALUE(n, i) if (n->kind == IDENTIFIER && n->parent->kind == PARAMETER) \
printf("%%%s", n->symbol->name); \
else { \
if (i == -1) printf("%d", ast_node_get_value_as_int(n)); \
else printf("%%%d", i); \
}
static Symbol *symtab;
static Symbol *global_symtab;
Visitor *llvm_codegen_new();
void llvm_codegen_visit_program (struct _Visitor *, struct AstNode *);
void llvm_codegen_visit_programdecl (struct _Visitor *, struct AstNode *);
void llvm_codegen_visit_procfunc_list (struct _Visitor *, struct AstNode *);
void llvm_codegen_visit_procfunc (struct _Visitor *, struct AstNode *);
void llvm_codegen_visit_vardecl_list (struct _Visitor *, struct AstNode *);
void llvm_codegen_visit_vardecl (struct _Visitor *, struct AstNode *);
void llvm_codegen_visit_identifier_list (struct _Visitor *, struct AstNode *);
void llvm_codegen_visit_param_list (struct _Visitor *, struct AstNode *);
void llvm_codegen_visit_parameter (struct _Visitor *, struct AstNode *);
void llvm_codegen_visit_statement_list(struct _Visitor *, struct AstNode *);
void llvm_codegen_visit_printint_stmt (struct _Visitor *, struct AstNode *);
void llvm_codegen_visit_printchar_stmt (struct _Visitor *, struct AstNode *);
void llvm_codegen_visit_printbool_stmt (struct _Visitor *, struct AstNode *);
void llvm_codegen_visit_printline_stmt (struct _Visitor *, struct AstNode *);
void llvm_codegen_visit_assignment_stmt (struct _Visitor *, struct AstNode *);
void llvm_codegen_visit_if_stmt (struct _Visitor *, struct AstNode *);
void llvm_codegen_visit_while_stmt (struct _Visitor *, struct AstNode *);
void llvm_codegen_visit_for_stmt (struct _Visitor *, struct AstNode *);
void llvm_codegen_visit_binary_expr (struct _Visitor *, struct AstNode *);
void llvm_codegen_visit_notfactor (struct _Visitor *, struct AstNode *);
void llvm_codegen_visit_call (struct _Visitor *, struct AstNode *);
void llvm_codegen_visit_callparam_list (struct _Visitor *, struct AstNode *);
void llvm_codegen_visit_callparam (struct _Visitor *, struct AstNode *);
void llvm_codegen_visit_identifier (struct _Visitor *, struct AstNode *);
void llvm_codegen_visit_literal (struct _Visitor *, struct AstNode *);
void llvm_codegen_visit_binary_op (struct _Visitor *, struct AstNode *);
void llvm_codegen_visit_not_op (struct _Visitor *, struct AstNode *);
#endif // LLVM_CODEGEN_VISITOR_H