11#include <llvm/IR/Function.h>
12#include <llvm/IR/Type.h>
13#include <llvm/IR/Value.h>
17namespace sammine_lang::AST {
21 std::shared_ptr<sammine_lang::LLVMRes> resPtr;
22 std::stack<std::map<std::string, llvm::AllocaInst *>> allocaValues;
24 llvm::Function *current_func;
25 llvm::Function *getCurrentFunction();
27 void setCurrentFunction(llvm::Function *);
37 CgVisitor(std::shared_ptr<sammine_lang::LLVMRes> resPtr)
38 : resPtr(resPtr), type_converter(*resPtr), jasmine(*resPtr),
39 ref_counter(*resPtr) {}
41 void enter_new_scope()
override;
42 void exit_new_scope()
override;
48 virtual void preorder_walk(
ProgramAST *ast)
override;
49 virtual void preorder_walk(
VarDefAST *ast)
override;
50 virtual void preorder_walk(
FuncDefAST *ast)
override;
52 virtual void preorder_walk(
ExternAST *ast)
override;
54 virtual void preorder_walk(
CallExprAST *ast)
override;
59 virtual void preorder_walk(
BoolExprAST *ast)
override;
61 virtual void preorder_walk(
BlockAST *ast)
override;
62 virtual void preorder_walk(
IfExprAST *ast)
override;
63 virtual void preorder_walk(
UnitExprAST *ast)
override;
64 virtual void preorder_walk(
TypedVarAST *ast)
override;
68 virtual void postorder_walk(
ProgramAST *ast)
override {}
69 virtual void postorder_walk(
VarDefAST *ast)
override;
70 virtual void postorder_walk(
ExternAST *ast)
override {}
71 virtual void postorder_walk(
FuncDefAST *ast)
override;
73 virtual void postorder_walk(
PrototypeAST *ast)
override {}
74 virtual void postorder_walk(
CallExprAST *ast)
override {}
79 virtual void postorder_walk(
BoolExprAST *ast)
override {}
81 virtual void postorder_walk(
BlockAST *ast)
override;
82 virtual void postorder_walk(
IfExprAST *ast)
override {}
83 virtual void postorder_walk(
UnitExprAST *ast)
override {}
84 virtual void postorder_walk(
TypedVarAST *ast)
override {}
Defines the AST Abstract class for printing out AST Nodes.
Holds declaration for all the AST Nodes.
Houses ShadowGarbageCollector scheme as well as the ref counter.
Defined LLVMRes, which encapsulates the state of LLVM (Context, Modules, IRBuilder,...
Defines the TypeConverter, which holds the characistics of converting our AST types into LLVM IR type...
An AST to simulate a { } code block.
Definition Ast.h:158
virtual void visit(FuncDefAST *) override
Definition CodegenVisitor.cpp:42
A Function Definition that has the prototype and definition in terms of a block.
Definition Ast.h:129
A prototype to present "func func_name(...) -> type;".
Definition Ast.h:76
Definition TypeConverter.h:14
A variable definition: "var x = expression;".
Definition Ast.h:231