sammine-lang
Loading...
Searching...
No Matches
GeneralSemanticsVisitor.h
Go to the documentation of this file.
1
2#pragma once
3#include "ast/AstBase.h"
4#include "ast/AstDecl.h"
6#include "util/Utilities.h"
11namespace sammine_lang::AST {
13class GeneralSemanticsVisitor : public ScopedASTVisitor {
14 std::set<BlockAST *> need_return;
15 bool returned = false;
16
17public:
18 // A simple scoping class, doesn't differentiate between different names, like
19 // variable name, func name and all that
21 GeneralSemanticsVisitor() { scope_stack.push_context(); }
22
23 // INFO: CheckAndReg means: Check if there's redefinition, if not, register
24 // INFO: Check for castable means: Check if the name existed, if not, register
25
26 virtual void enter_new_scope() override { this->scope_stack.push_context(); }
27 virtual void exit_new_scope() override { this->scope_stack.pop_context(); }
28 virtual void preorder_walk(FuncDefAST *ast) override;
29 virtual void postorder_walk(BlockAST *ast) override;
30 virtual void preorder_walk(BlockAST *ast) override;
31 virtual void preorder_walk(ReturnExprAST *ast) override;
32
33 virtual void preorder_walk(ProgramAST *ast) override {}
34
35 virtual void preorder_walk(VarDefAST *ast) override {}
36
37 virtual void preorder_walk(ExternAST *ast) override {}
38 virtual void preorder_walk(RecordDefAST *ast) override {}
39 virtual void preorder_walk(PrototypeAST *ast) override {}
40 virtual void preorder_walk(CallExprAST *ast) override {}
41 virtual void preorder_walk(BinaryExprAST *ast) override {}
42 virtual void preorder_walk(NumberExprAST *ast) override {}
43 virtual void preorder_walk(StringExprAST *ast) override {}
44 virtual void preorder_walk(BoolExprAST *ast) override {}
45
46 virtual void preorder_walk(VariableExprAST *ast) override {}
47 virtual void preorder_walk(IfExprAST *ast) override {}
48 virtual void preorder_walk(UnitExprAST *ast) override {}
49 virtual void preorder_walk(TypedVarAST *ast) override {}
50
51 // post order
52 virtual void postorder_walk(ProgramAST *ast) override {}
53 virtual void postorder_walk(VarDefAST *ast) override {}
54 virtual void postorder_walk(ExternAST *ast) override {}
55 virtual void postorder_walk(FuncDefAST *ast) override {}
56 virtual void postorder_walk(RecordDefAST *ast) override {}
57 virtual void postorder_walk(PrototypeAST *ast) override {}
58 virtual void postorder_walk(CallExprAST *ast) override {}
59 virtual void postorder_walk(ReturnExprAST *ast) override {}
60 virtual void postorder_walk(BinaryExprAST *ast) override {}
61 virtual void postorder_walk(NumberExprAST *ast) override {}
62 virtual void postorder_walk(StringExprAST *ast) override {}
63 virtual void postorder_walk(BoolExprAST *ast) override {}
64 virtual void postorder_walk(VariableExprAST *ast) override {}
65 virtual void postorder_walk(IfExprAST *ast) override {}
66 virtual void postorder_walk(UnitExprAST *ast) override {}
67 virtual void postorder_walk(TypedVarAST *ast) override {}
68};
69} // namespace sammine_lang::AST
Defines the AST Abstract class for printing out AST Nodes.
Holds declaration for all the AST Nodes.
A simple scoping class, doesn't differentiate between different names, like variable name,...
Holds classes and functionalities for dealing with Error handling, source locations caching & indexin...
An AST to simulate a { } code block.
Definition Ast.h:158
Definition Ast.h:301
Definition Ast.h:375
A Function Definition that has the prototype and definition in terms of a block.
Definition Ast.h:129
Definition Ast.h:175
Definition Ast.h:432
Definition AstBase.h:110
A prototype to present "func func_name(...) -> type;".
Definition Ast.h:76
Definition AstBase.h:145
Definition Ast.h:406
A variable definition: "var x = expression;".
Definition Ast.h:231