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:
Commit06006fc601ab5f7bffa095b7279a61070e38ba54 (patch)
Author
 Syndamia <kamen@syndamia.com>
2023-01-19 11:27:31 +0200
Committer
 Syndamia <kamen@syndamia.com>
2023-01-19 11:27:31 +0200
Filesac858f357318ac2d588cdded32dc995da9fe9d3e /Year 2/Implementation of Programming Languages/Transpiler/src/LLVMVisitor/LLVMVisitor.cpp
uni-projects-06006fc601ab5f7bffa095b7279a61070e38ba54.tar
uni-projects-06006fc601ab5f7bffa095b7279a61070e38ba54.tar.gz
uni-projects-06006fc601ab5f7bffa095b7279a61070e38ba54.zip
Parent8f41c57ff12fa72693016b75fec63bb86ae6560f (diff)
[IPL/T] Implemented Float type and added basic function structure as well as added addition function for two 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 f68b80d..d3eea2d 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
@@ -10,3 +10,23 @@ std::string LLVMVisitor::Visit(const Integer& vint) {
outFile << valRegister + " = " + std::to_string(vint.get_value()) + "\n";
return valRegister;
}
+
+std::string LLVMVisitor::Visit(const Float& vfloat) {
+ std::string valRegister = *(reg++);
+ outFile << valRegister + " = " + std::to_string(vfloat.get_value()) + "\n";
+ 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 valRegister = *(reg++);
+ outFile << valRegister << " = add i32 " << leftArg << ", " << rightArg << "\n";
+ return valRegister;
+}
+
+std::string LLVMVisitor::Visit(const BuiltInFunction& bfun) {
+ if (bfun.get_name() == "+")
+ return f_add(bfun);
+ return "";
+}