sammine-lang
Loading...
Searching...
No Matches
include
semantics
GeneralSemanticsVisitor.h
Go to the documentation of this file.
1
2
#pragma once
3
#include "
ast/AstBase.h
"
4
#include "
ast/AstDecl.h
"
5
#include "
util/LexicalContext.h
"
6
#include "
util/Utilities.h
"
11
namespace
sammine_lang::AST {
13
class
GeneralSemanticsVisitor :
public
ScopedASTVisitor
{
14
std::set<BlockAST *> need_return;
15
bool
returned =
false
;
16
17
public
:
18
// A simple scoping class, doesn't differentiate between different names, like
19
// variable name, func name and all that
20
LexicalStack<sammine_util::Location>
scope_stack;
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
AstBase.h
Defines the AST Abstract class for printing out AST Nodes.
AstDecl.h
Holds declaration for all the AST Nodes.
LexicalContext.h
A simple scoping class, doesn't differentiate between different names, like variable name,...
Utilities.h
Holds classes and functionalities for dealing with Error handling, source locations caching & indexin...
sammine_lang::AST::BinaryExprAST
Definition
Ast.h:319
sammine_lang::AST::BlockAST
An AST to simulate a { } code block.
Definition
Ast.h:158
sammine_lang::AST::BoolExprAST
Definition
Ast.h:301
sammine_lang::AST::CallExprAST
Definition
Ast.h:375
sammine_lang::AST::ExternAST
A Function Definition that has the prototype and definition in terms of a block.
Definition
Ast.h:129
sammine_lang::AST::FuncDefAST
Definition
Ast.h:175
sammine_lang::AST::IfExprAST
Definition
Ast.h:432
sammine_lang::AST::LexicalStack
Definition
AstBase.h:110
sammine_lang::AST::NumberExprAST
Definition
Ast.h:258
sammine_lang::AST::ProgramAST
Definition
Ast.h:24
sammine_lang::AST::PrototypeAST
A prototype to present "func func_name(...) -> type;".
Definition
Ast.h:76
sammine_lang::AST::RecordDefAST
Definition
Ast.h:202
sammine_lang::AST::ReturnExprAST
Definition
Ast.h:343
sammine_lang::AST::ScopedASTVisitor
Definition
AstBase.h:145
sammine_lang::AST::StringExprAST
Definition
Ast.h:279
sammine_lang::AST::TypedVarAST
Definition
Ast.h:40
sammine_lang::AST::UnitExprAST
Definition
Ast.h:406
sammine_lang::AST::VarDefAST
A variable definition: "var x = expression;".
Definition
Ast.h:231
sammine_lang::AST::VariableExprAST
Definition
Ast.h:458
Generated by
1.13.2