17 std::map<BlockAST *, bool> func_blocks;
18 bool returned =
false;
24 GeneralSemanticsVisitor() { scope_stack.push_context(); }
27 void check_reserved_identifier(
const std::string &name,
33 virtual void enter_new_scope()
override { this->scope_stack.push_context(); }
34 virtual void exit_new_scope()
override { this->scope_stack.pop_context(); }
35 virtual void preorder_walk(
FuncDefAST *ast)
override;
36 virtual void postorder_walk(
BlockAST *ast)
override;
37 virtual void preorder_walk(
BlockAST *ast)
override;
40 virtual void preorder_walk(
ProgramAST *ast)
override {}
42 virtual void preorder_walk(
VarDefAST *ast)
override;
44 virtual void preorder_walk(
ExternAST *ast)
override {}
46 virtual void preorder_walk(
EnumDefAST *ast)
override;
48 virtual void preorder_walk(
PrototypeAST *ast)
override {}
49 virtual void preorder_walk(
CallExprAST *ast)
override {}
53 virtual void preorder_walk(
BoolExprAST *ast)
override {}
54 virtual void preorder_walk(
CharExprAST *ast)
override {}
57 virtual void preorder_walk(
IfExprAST *ast)
override {}
58 virtual void preorder_walk(
UnitExprAST *ast)
override {}
59 virtual void preorder_walk(
TypedVarAST *ast)
override {}
60 virtual void preorder_walk(
DerefExprAST *ast)
override {}
62 virtual void preorder_walk(
AllocExprAST *ast)
override {}
63 virtual void preorder_walk(
FreeExprAST *ast)
override {}
65 virtual void preorder_walk(
IndexExprAST *ast)
override {}
66 virtual void preorder_walk(
LenExprAST *ast)
override {}
70 virtual void preorder_walk(
CaseExprAST *ast)
override {}
71 virtual void preorder_walk(
WhileExprAST *ast)
override {}
78 for (
auto &method : ast->methods)
79 method->accept_vis(
this);
85 virtual void postorder_walk(
ProgramAST *ast)
override {}
86 virtual void postorder_walk(
VarDefAST *ast)
override {}
87 virtual void postorder_walk(
ExternAST *ast)
override {}
88 virtual void postorder_walk(
FuncDefAST *ast)
override {}
89 virtual void postorder_walk(
StructDefAST *ast)
override {}
90 virtual void postorder_walk(
EnumDefAST *ast)
override {}
92 virtual void postorder_walk(
PrototypeAST *ast)
override {}
93 virtual void postorder_walk(
CallExprAST *ast)
override {}
98 virtual void postorder_walk(
BoolExprAST *ast)
override {}
99 virtual void postorder_walk(
CharExprAST *ast)
override {}
101 virtual void postorder_walk(
IfExprAST *ast)
override {}
102 virtual void postorder_walk(
UnitExprAST *ast)
override {}
103 virtual void postorder_walk(
TypedVarAST *ast)
override {}
104 virtual void postorder_walk(
DerefExprAST *ast)
override {}
106 virtual void postorder_walk(
AllocExprAST *ast)
override {}
107 virtual void postorder_walk(
FreeExprAST *ast)
override {}
109 virtual void postorder_walk(
IndexExprAST *ast)
override {}
110 virtual void postorder_walk(
LenExprAST *ast)
override {}
114 virtual void postorder_walk(
CaseExprAST *ast)
override {}
115 virtual void postorder_walk(
WhileExprAST *ast)
override {}
A simple scoping class, doesn't differentiate between different names, like variable name,...