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 *);
36 void cleanUpGarbageBeforeExit() {
38 llvm::Function *refcntVisitorFunc = resPtr->Module->getFunction(
"refcnt_visitor");
39 if (refcntVisitorFunc) {
41 resPtr->Builder->CreateCall(refcntVisitorFunc, {});
45 jasmine.relieveStackEntry();
48 CgVisitor(std::shared_ptr<sammine_lang::LLVMRes> resPtr)
49 : resPtr(resPtr), type_converter(*resPtr), jasmine(*resPtr),
50 ref_counter(*resPtr) {}
52 void enter_new_scope()
override;
53 void exit_new_scope()
override;
59 virtual void preorder_walk(
ProgramAST *ast)
override;
60 virtual void preorder_walk(
VarDefAST *ast)
override;
61 virtual void preorder_walk(
FuncDefAST *ast)
override;
63 virtual void preorder_walk(
ExternAST *ast)
override;
65 virtual void preorder_walk(
CallExprAST *ast)
override;
70 virtual void preorder_walk(
BoolExprAST *ast)
override;
72 virtual void preorder_walk(
BlockAST *ast)
override;
73 virtual void preorder_walk(
IfExprAST *ast)
override;
74 virtual void preorder_walk(
UnitExprAST *ast)
override;
75 virtual void preorder_walk(
TypedVarAST *ast)
override;
79 virtual void postorder_walk(
ProgramAST *ast)
override {}
80 virtual void postorder_walk(
VarDefAST *ast)
override;
81 virtual void postorder_walk(
ExternAST *ast)
override {}
82 virtual void postorder_walk(
FuncDefAST *ast)
override;
84 virtual void postorder_walk(
PrototypeAST *ast)
override {}
85 virtual void postorder_walk(
CallExprAST *ast)
override {}
90 virtual void postorder_walk(
BoolExprAST *ast)
override {}
92 virtual void postorder_walk(
BlockAST *ast)
override;
93 virtual void postorder_walk(
IfExprAST *ast)
override {}
94 virtual void postorder_walk(
UnitExprAST *ast)
override {}
95 virtual void postorder_walk(
TypedVarAST *ast)
override {}
Defined LLVMRes, which encapsulates the state of LLVM (Context, Modules, IRBuilder,...