From 93175ba5edb0eacc182f573c4fd4556f089da305 Mon Sep 17 00:00:00 2001 From: _ov4 Date: Fri, 30 Jan 2026 13:28:45 +0000 Subject: Added BYREF and BYVAL --- include/cps/ArrayHandler.h | 6 +++--- include/cps/CodeGen.h | 2 +- include/cps/FunctionAST.h | 7 ++++--- include/cps/FunctionGen.h | 7 ++++--- include/cps/Lexer.h | 4 +++- include/cps/Parser.h | 2 +- 6 files changed, 16 insertions(+), 12 deletions(-) (limited to 'include') 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 *NamedValues; + std::map *NamedValues; std::map ArrayTable; RuntimeCheck &RuntimeChecker; @@ -37,13 +37,13 @@ class ArrayHandler { void emitPrintLoop(const std::string &Name, int CurrentDim, std::vector CurrentIndices, llvm::FunctionCallee PrintfFunc, llvm::Value* FmtStr); public: - ArrayHandler(llvm::LLVMContext &C, llvm::IRBuilder<> &B, llvm::Module &M, std::map &NV); + ArrayHandler(llvm::LLVMContext &C, llvm::IRBuilder<> &B, llvm::Module &M, std::map &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 &NV, RuntimeCheck &RC); + ArrayHandler(llvm::LLVMContext &C, llvm::IRBuilder<> &B, llvm::Module &M, std::map &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 TheContext; std::unique_ptr TheModule; std::unique_ptr> Builder; - std::map NamedValues; + std::map NamedValues; std::unique_ptr Arrays; std::unique_ptr 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 #include #include +#include namespace cps { class PrototypeAST { std::string Name; - std::vector> Args; + std::vector> Args; std::string ReturnType; bool IsExternal; public: PrototypeAST(const std::string &Name, - std::vector> Args, + std::vector> 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> &getArgs() const { return Args; } + const std::vector> &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 #include #include +#include namespace cps { @@ -14,13 +15,13 @@ class FunctionGen { llvm::Module &Module; llvm::IRBuilder<> &Builder; - std::map &NamedValues; + std::map &NamedValues; - void createArgumentAllocas(llvm::Function *F, const std::vector> &Args); + void createArgumentAllocas(llvm::Function *F, const std::vector> &Args); public: FunctionGen(llvm::LLVMContext &C, llvm::Module &M, llvm::IRBuilder<> &B, - std::map &NV) + std::map &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 ParseProcedure(); std::unique_ptr ParseCallStmt(); std::unique_ptr ParseReturnStmt(); - std::vector> ParsePrototypeArgs(); + std::vector> ParsePrototypeArgs(); public: Parser(Lexer &L); -- cgit v1.3.1-4-g156e