From bfa6fffc85772c17219437ab99c0cc59c3056f88 Mon Sep 17 00:00:00 2001 From: Syndamia Date: Thu, 19 Jan 2023 11:57:59 +0200 Subject: [IPL/T] Add function can handle multiple arguments --- .../Transpiler/src/LLVMVisitor/LLVMVisitor.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'Year 2/Implementation of Programming Languages/Transpiler/src/LLVMVisitor/LLVMVisitor.cpp') 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; -- cgit v1.3.1-23-gd82d