diff options
[IPL/T] Add function can handle multiple arguments
1 files changed, 9 insertions, 3 deletions
| -rw-r--r-- | Year 2/Implementation of Programming Languages/Transpiler/src/LLVMVisitor/LLVMVisitor.cpp | 12 |
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; |
