Summary Files Commits Branches @commit @diff @stats
path: root / Year 2 / Implementation of Programming Languages / Transpiler / src / LLVMVisitor / LLVMVisitor.cpp
diff options
context:
space:
mode:
Commitbfa6fffc85772c17219437ab99c0cc59c3056f88 (patch)
Author
 Syndamia <kamen@syndamia.com>
2023-01-19 11:57:59 +0200
Committer
 Syndamia <kamen@syndamia.com>
2023-01-19 11:57:59 +0200
Files56fbf910a0507e3f42a71657144bbf0a0636a6ca /Year 2/Implementation of Programming Languages/Transpiler/src/LLVMVisitor/LLVMVisitor.cpp
uni-projects-bfa6fffc85772c17219437ab99c0cc59c3056f88.tar
uni-projects-bfa6fffc85772c17219437ab99c0cc59c3056f88.tar.gz
uni-projects-bfa6fffc85772c17219437ab99c0cc59c3056f88.zip
Parentfd77c95a1042b319ec6dc0fcc10d77d0fe8af170 (diff)
[IPL/T] Add function can handle multiple arguments
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 d3eea2d..9ca6f8f 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
@@ -17,9 +17,15 @@ std::string LLVMVisitor::Visit(const Float& vfloat) {
return valRegister;
}
-std::string LLVMVisitor::f_add(const BuiltInFunction& bfun) {
- std::string leftArg = bfun.get_args()[0]->Visit(*this);
- std::string rightArg = bfun.get_args()[1]->Visit(*this);
+std::string LLVMVisitor::f_add(const BuiltInFunction& bfun, unsigned i) {
+ std::string leftArg = bfun.get_args()[i]->Visit(*this);
+ std::string rightArg;
+ if (bfun.get_args().size() - 2 == i) {
+ rightArg = bfun.get_args()[i+1]->Visit(*this);
+ }
+ else {
+ rightArg = f_add(bfun, i+1);
+ }
std::string valRegister = *(reg++);
outFile << valRegister << " = add i32 " << leftArg << ", " << rightArg << "\n";
return valRegister;