sammine-lang
Loading...
Searching...
No Matches
ScopeGeneratorVisitor.h
Go to the documentation of this file.
1#pragma once
2#include "ast/Ast.h"
3#include "ast/AstBase.h"
5#include "util/Utilities.h"
6namespace sammine_lang::AST {
7
11class ScopeGeneratorVisitor : public ScopedASTVisitor {
12public:
13 // A simple scoping class, doesn't differentiate between different names, like
14 // variable name, func name and all that
16 ScopeGeneratorVisitor() { scope_stack.push_context(); }
17
18 // INFO: CheckAndReg means: Check if there's redefinition, if not, register
19 // INFO: Check for castable means: Check if the name existed, if not, register
20
21 virtual void enter_new_scope() override { this->scope_stack.push_context(); }
22 virtual void exit_new_scope() override { this->scope_stack.pop_context(); }
23
24 // pre order
25
26 // INFO: Nothing here
27 virtual void preorder_walk(ProgramAST *ast) override;
28
29 // INFO: CheckAndReg variable name
30 virtual void preorder_walk(VarDefAST *ast) override;
31
32 // INFO: CheckAndReg extern name
33 virtual void preorder_walk(ExternAST *ast) override;
34 // INFO: CheckAndReg function name, enter new block
35 virtual void preorder_walk(FuncDefAST *ast) override;
36 virtual void preorder_walk(RecordDefAST *ast) override;
37 // INFO: CheckAndReg all variable name, which should only clash if you have
38 // the same names in prototype
39 virtual void preorder_walk(PrototypeAST *ast) override;
40 // INFO: Check
41 virtual void preorder_walk(CallExprAST *ast) override;
42 virtual void preorder_walk(ReturnExprAST *ast) override;
43 virtual void preorder_walk(BinaryExprAST *ast) override;
44 virtual void preorder_walk(NumberExprAST *ast) override;
45 virtual void preorder_walk(StringExprAST *ast) override;
46 virtual void preorder_walk(BoolExprAST *ast) override;
47
48 // INFO: Check
49 virtual void preorder_walk(VariableExprAST *ast) override;
50 virtual void preorder_walk(BlockAST *ast) override;
51 virtual void preorder_walk(IfExprAST *ast) override;
52 virtual void preorder_walk(UnitExprAST *ast) override;
53 virtual void preorder_walk(TypedVarAST *ast) override;
54
55 // post order
56 virtual void postorder_walk(ProgramAST *ast) override;
57 virtual void postorder_walk(VarDefAST *ast) override;
58 virtual void postorder_walk(ExternAST *ast) override;
59 // INFO: Pop the scope
60 virtual void postorder_walk(FuncDefAST *ast) override;
61 virtual void postorder_walk(RecordDefAST *ast) override;
62 virtual void postorder_walk(PrototypeAST *ast) override;
63 virtual void postorder_walk(CallExprAST *ast) override;
64 virtual void postorder_walk(ReturnExprAST *ast) override;
65 virtual void postorder_walk(BinaryExprAST *ast) override;
66 virtual void postorder_walk(NumberExprAST *ast) override;
67 virtual void postorder_walk(StringExprAST *ast) override;
68 virtual void postorder_walk(BoolExprAST *ast) override;
69 virtual void postorder_walk(VariableExprAST *ast) override;
70 virtual void postorder_walk(BlockAST *ast) override;
71 virtual void postorder_walk(IfExprAST *ast) override;
72 virtual void postorder_walk(UnitExprAST *ast) override;
73 virtual void postorder_walk(TypedVarAST *ast) override;
74};
75
76} // namespace sammine_lang::AST
Defines the AST Abstract class for printing out AST Nodes.
Defined the AST Node classes (ProgramAST, RecordDefAST, FuncDefAST) and a visitor interface for trave...
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