sammine-lang
Loading...
Searching...
No Matches
Garbage.h
1
2#pragma once
3#include "llvm/IR/DerivedTypes.h"
4#include "llvm/IR/Function.h"
5#include "llvm/IR/IRBuilder.h"
6#include "llvm/IR/LLVMContext.h"
7#include "llvm/IR/Module.h"
8
9#include "ast/Ast.h"
10#include "ast/AstDecl.h"
11#include <llvm/IR/GlobalVariable.h>
12#include <string>
13
14namespace sammine_lang::AST {
16 int32_t calculate(BlockAST *ast);
17 int32_t calculate(ExprAST *ast);
18 int32_t calculate(IfExprAST *ast);
19 int32_t calculate(VariableExprAST *ast);
20
21 // TODO: Tell Jasmine to re-check this
22 int32_t calculate(CallExprAST *ast);
23
24 int32_t calculate(ReturnExprAST *ast);
25 int32_t calculate(BinaryExprAST *ast);
26 int32_t calculate(BoolExprAST *ast);
27 int32_t calculate(StringExprAST *ast);
28 int32_t calculate(NumberExprAST *ast);
29 int32_t calculate(VarDefAST *ast);
30};
31class ShadowGarbageCollector {
32 [[maybe_unused]]
33 llvm::Module &module;
34 llvm::LLVMContext &context;
35 [[maybe_unused]]
36 llvm::IRBuilder<> &builder;
37 std::vector<llvm::Constant *> MetaDataEntries;
38
39 // TODO: work with this in create frame map, rename the void to frame map
40 // struct
41 // rename to getFrameMap
42 std::map<std::string, llvm::GlobalVariable *> fn_name_to_frame_map;
43
44public:
45 ShadowGarbageCollector(llvm::Module &module, llvm::LLVMContext &context,
46 llvm::IRBuilder<> &builder)
47 : module(module), context(context), builder(builder) {}
48
49 virtual std::string llvmStrategy() { return "shadow-stack"; }
51
53
55
56 void initGCFunc();
57};
58} // namespace sammine_lang::AST
Holds declaration for all the AST Nodes.
Defined the AST Node classes (ProgramAST, RecordDefAST, FuncDefAST) and a visitor interface for trave...
An AST to simulate a { } code block.
Definition Ast.h:158
Definition Ast.h:301
Definition Ast.h:375
Definition Ast.h:150
Definition Ast.h:175
Definition Ast.h:432
void initGCFunc()
Definition Garbage.cpp:87
void createFrameMapForCallee(FuncDefAST *)
Insert a FrameMap in the beginning of each function.
Definition Garbage.cpp:13
void initGlobalRootChain()
Definition Garbage.cpp:79
void setStackEntryFromCaller(FuncDefAST *)
Definition Garbage.cpp:43
A variable definition: "var x = expression;".
Definition Ast.h:231