aboutsummaryrefslogtreecommitdiff
path: root/include/cps
diff options
context:
space:
mode:
author_ov4 <hausemasterstream@gmail.com>2026-01-30 13:28:45 +0000
committer_ov4 <hausemasterstream@gmail.com>2026-01-30 13:28:45 +0000
commit93175ba5edb0eacc182f573c4fd4556f089da305 (patch)
tree0e50d5e0b50d7298dcb50342583fe4b718ccd1c0 /include/cps
parentbd799e42b40613983c6e3cb9aedf58866ac68605 (diff)
Added BYREF and BYVAL
Diffstat (limited to 'include/cps')
-rw-r--r--include/cps/ArrayHandler.h6
-rw-r--r--include/cps/CodeGen.h2
-rw-r--r--include/cps/FunctionAST.h7
-rw-r--r--include/cps/FunctionGen.h7
-rw-r--r--include/cps/Lexer.h4
-rw-r--r--include/cps/Parser.h2
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);