diff options
| Commit | 95dfe7c4df8482c7b83a816917cb27605ceb3076 (patch) | |
|---|---|---|
| Author | 2023-02-07 22:06:33 +0200 | |
| Committer | 2023-02-07 22:06:33 +0200 | |
| Files | 8579c3e2ec0675c8222a4684d1e4ea6177413f31 | |
| uni-projects-95dfe7c4df8482c7b83a816917cb27605ceb3076.tar uni-projects-95dfe7c4df8482c7b83a816917cb27605ceb3076.tar.gz uni-projects-95dfe7c4df8482c7b83a816917cb27605ceb3076.zip | ||
| Parent | 7913fe2fd73b11f8b1b13d8b3e65aca66dc3282c (diff) | |
[IPL/T] Implemented * and /
2 files changed, 14 insertions, 2 deletions
diff --git a/Year 2/Implementation of Programming Languages/Transpiler/src/LLVMVisitor/LLVMVisitor.cpp b/Year 2/Implementation of Programming Languages/Transpiler/src/LLVMVisitor/LLVMVisitor.cpp index 238c2f6..d6cdf89 100644 --- a/Year 2/Implementation of Programming Languages/Transpiler/src/LLVMVisitor/LLVMVisitor.cpp +++ b/Year 2/Implementation of Programming Languages/Transpiler/src/LLVMVisitor/LLVMVisitor.cpp @@ -97,14 +97,22 @@ LLVMRet LLVMVisitor::aritop(const std::string name, const std::vector<Value*>& a return { leftRet.type, *r }; } -LLVMRet LLVMVisitor::f_add(const std::vector<Value*>& args) { +LLVMRet LLVMVisitor::f_add(funcargs args) { return aritop("add", args); } -LLVMRet LLVMVisitor::f_sub(const std::vector<Value*>& args) { +LLVMRet LLVMVisitor::f_sub(funcargs args) { return aritop("sub", args); } +LLVMRet LLVMVisitor::f_mul(funcargs args) { + return aritop("mul", args); +} + +LLVMRet LLVMVisitor::f_div(funcargs args) { + return aritop("div", args); +} + LLVMRet LLVMVisitor::Visit(const Funcall& vfuncall) { // Direct functions generate their own LLVM IR auto directFuncIt = funcs_direct.find(vfuncall.get_funname()); @@ -140,6 +148,8 @@ LLVMVisitor::LLVMVisitor(const char* fileName) : outFile(std::ofstream(fileName) funcs_direct.insert({"+", &LLVMVisitor::f_add}); funcs_direct.insert({"-", &LLVMVisitor::f_sub}); + funcs_direct.insert({"*", &LLVMVisitor::f_mul}); + funcs_direct.insert({"/", &LLVMVisitor::f_div}); funcs_direct.insert({"defun", &LLVMVisitor::f_defun}); funcs_direct.insert({"defvar", &LLVMVisitor::f_defvar}); } diff --git a/Year 2/Implementation of Programming Languages/Transpiler/src/LLVMVisitor/LLVMVisitor.h b/Year 2/Implementation of Programming Languages/Transpiler/src/LLVMVisitor/LLVMVisitor.h index 0a667e2..a79d75c 100644 --- a/Year 2/Implementation of Programming Languages/Transpiler/src/LLVMVisitor/LLVMVisitor.h +++ b/Year 2/Implementation of Programming Languages/Transpiler/src/LLVMVisitor/LLVMVisitor.h @@ -31,6 +31,8 @@ class LLVMVisitor { LLVMRet aritop(const std::string name, funcargs args, unsigned astart = 0); LLVMRet f_add(funcargs args); LLVMRet f_sub(funcargs args); + LLVMRet f_mul(funcargs args); + LLVMRet f_div(funcargs args); std::stack<std::map<std::string, LLVMRet>*> locals; std::map<std::string, LLVMRet> funcs_user; |
