diff options
Diffstat (limited to 'include/cps')
| -rw-r--r-- | include/cps/ArrayHandler.h | 6 | ||||
| -rw-r--r-- | include/cps/CodeGen.h | 2 | ||||
| -rw-r--r-- | include/cps/FunctionAST.h | 7 | ||||
| -rw-r--r-- | include/cps/FunctionGen.h | 7 | ||||
| -rw-r--r-- | include/cps/Lexer.h | 4 | ||||
| -rw-r--r-- | include/cps/Parser.h | 2 |
6 files changed, 16 insertions, 12 deletions
diff --git a/include/cps/ArrayHandler.h b/include/cps/ArrayHandler.h index 734f464..1ee91db 100644 --- a/include/cps/ArrayHandler.h +++ b/include/cps/ArrayHandler.h @@ -24,7 +24,7 @@ class ArrayHandler { llvm::LLVMContext *TheContext; llvm::IRBuilder<> *Builder; llvm::Module *TheModule; - std::map<std::string, llvm::AllocaInst*> *NamedValues; + std::map<std::string, llvm::Value*> *NamedValues; std::map<std::string, ArrayMetadata> ArrayTable; RuntimeCheck &RuntimeChecker; @@ -37,13 +37,13 @@ class ArrayHandler { void emitPrintLoop(const std::string &Name, int CurrentDim, std::vector<llvm::Value*> CurrentIndices, llvm::FunctionCallee PrintfFunc, llvm::Value* FmtStr); public: - ArrayHandler(llvm::LLVMContext &C, llvm::IRBuilder<> &B, llvm::Module &M, std::map<std::string, llvm::AllocaInst*> &NV); + ArrayHandler(llvm::LLVMContext &C, llvm::IRBuilder<> &B, llvm::Module &M, std::map<std::string, llvm::Value*> &NV); void setupExternalFunctions(); void emitArrayDeclare(ArrayDeclareStmtAST *Stmt, CodeGen &CG); void emitArrayAssign(ArrayAssignStmtAST *Stmt, CodeGen &CG); - ArrayHandler(llvm::LLVMContext &C, llvm::IRBuilder<> &B, llvm::Module &M, std::map<std::string, llvm::AllocaInst*> &NV, RuntimeCheck &RC); + ArrayHandler(llvm::LLVMContext &C, llvm::IRBuilder<> &B, llvm::Module &M, std::map<std::string, llvm::Value*> &NV, RuntimeCheck &RC); llvm::Value* emitArrayAccess(ArrayAccessExprAST *Expr, CodeGen &CG); diff --git a/include/cps/CodeGen.h b/include/cps/CodeGen.h index 832ba7a..85f605f 100644 --- a/include/cps/CodeGen.h +++ b/include/cps/CodeGen.h @@ -16,7 +16,7 @@ class CodeGen { std::unique_ptr<llvm::LLVMContext> TheContext; std::unique_ptr<llvm::Module> TheModule; std::unique_ptr<llvm::IRBuilder<>> Builder; - std::map<std::string, llvm::AllocaInst*> NamedValues; + std::map<std::string, llvm::Value*> NamedValues; std::unique_ptr<ArrayHandler> Arrays; std::unique_ptr<RuntimeCheck> RuntimeChecker; diff --git a/include/cps/FunctionAST.h b/include/cps/FunctionAST.h index 155bd8c..5b4da6c 100644 --- a/include/cps/FunctionAST.h +++ b/include/cps/FunctionAST.h @@ -3,24 +3,25 @@ #include <vector> #include <string> #include <memory> +#include <tuple> namespace cps { class PrototypeAST { std::string Name; - std::vector<std::pair<std::string, std::string>> Args; + std::vector<std::tuple<std::string, std::string, bool>> Args; std::string ReturnType; bool IsExternal; public: PrototypeAST(const std::string &Name, - std::vector<std::pair<std::string, std::string>> Args, + std::vector<std::tuple<std::string, std::string, bool>> Args, const std::string &ReturnType, bool IsExternal = false) : Name(Name), Args(std::move(Args)), ReturnType(ReturnType), IsExternal(IsExternal) {} const std::string &getName() const { return Name; } - const std::vector<std::pair<std::string, std::string>> &getArgs() const { return Args; } + const std::vector<std::tuple<std::string, std::string, bool>> &getArgs() const { return Args; } const std::string &getReturnType() const { return ReturnType; } bool isExternal() const { return IsExternal; } }; diff --git a/include/cps/FunctionGen.h b/include/cps/FunctionGen.h index c1a6ebd..84a2858 100644 --- a/include/cps/FunctionGen.h +++ b/include/cps/FunctionGen.h @@ -6,6 +6,7 @@ #include <vector> #include <functional> #include <string> +#include <tuple> namespace cps { @@ -14,13 +15,13 @@ class FunctionGen { llvm::Module &Module; llvm::IRBuilder<> &Builder; - std::map<std::string, llvm::AllocaInst*> &NamedValues; + std::map<std::string, llvm::Value*> &NamedValues; - void createArgumentAllocas(llvm::Function *F, const std::vector<std::pair<std::string, std::string>> &Args); + void createArgumentAllocas(llvm::Function *F, const std::vector<std::tuple<std::string, std::string, bool>> &Args); public: FunctionGen(llvm::LLVMContext &C, llvm::Module &M, llvm::IRBuilder<> &B, - std::map<std::string, llvm::AllocaInst*> &NV) + std::map<std::string, llvm::Value*> &NV) : Context(C), Module(M), Builder(B), NamedValues(NV) {} llvm::Type *getLLVMType(const std::string &TypeName); diff --git a/include/cps/Lexer.h b/include/cps/Lexer.h index cd34435..4226cc3 100644 --- a/include/cps/Lexer.h +++ b/include/cps/Lexer.h @@ -49,7 +49,9 @@ enum Token { tok_returns = -403, tok_procedure = -404, tok_endprocedure = -405, - tok_call = -406 + tok_call = -406, + tok_byref = -407, + tok_byval = -408 }; class Lexer { diff --git a/include/cps/Parser.h b/include/cps/Parser.h index f328141..2a9c98a 100644 --- a/include/cps/Parser.h +++ b/include/cps/Parser.h @@ -36,7 +36,7 @@ class Parser { std::unique_ptr<StmtAST> ParseProcedure(); std::unique_ptr<StmtAST> ParseCallStmt(); std::unique_ptr<StmtAST> ParseReturnStmt(); - std::vector<std::pair<std::string, std::string>> ParsePrototypeArgs(); + std::vector<std::tuple<std::string, std::string, bool>> ParsePrototypeArgs(); public: Parser(Lexer &L); |
