diff options
| Commit | bfa6fffc85772c17219437ab99c0cc59c3056f88 (patch) | |
|---|---|---|
| Author | 2023-01-19 11:57:59 +0200 | |
| Committer | 2023-01-19 11:57:59 +0200 | |
| Files | 56fbf910a0507e3f42a71657144bbf0a0636a6ca | |
| uni-projects-bfa6fffc85772c17219437ab99c0cc59c3056f88.tar uni-projects-bfa6fffc85772c17219437ab99c0cc59c3056f88.tar.gz uni-projects-bfa6fffc85772c17219437ab99c0cc59c3056f88.zip | ||
| Parent | fd77c95a1042b319ec6dc0fcc10d77d0fe8af170 (diff) | |
[IPL/T] Add function can handle multiple arguments
3 files changed, 13 insertions, 5 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 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; 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 8b49cba..78719da 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 @@ -11,7 +11,7 @@ class LLVMVisitor { std::ofstream outFile; Register reg; - std::string f_add(const BuiltInFunction& bfun); + std::string f_add(const BuiltInFunction& bfun, unsigned i = 0); public: std::string Visit(const Integer& vint); diff --git a/Year 2/Implementation of Programming Languages/Transpiler/src/main.cpp b/Year 2/Implementation of Programming Languages/Transpiler/src/main.cpp index 088f4d0..fefe544 100644 --- a/Year 2/Implementation of Programming Languages/Transpiler/src/main.cpp +++ b/Year 2/Implementation of Programming Languages/Transpiler/src/main.cpp @@ -4,7 +4,9 @@ int main() { LLVMVisitor visitor("testout.ll"); - std::deque<Value*> nodes = { new BuiltInFunction("+", { new Integer(123), new Integer(567) }) }; + std::deque<Value*> nodes = { + new BuiltInFunction("+", { + new Integer(1), new Integer(2), new Integer(123) }) }; for (Value* n : nodes) { n->Visit(visitor); } |
