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:
Commit95dfe7c4df8482c7b83a816917cb27605ceb3076 (patch)
Author
 Syndamia <kamen@syndamia.com>
2023-02-07 22:06:33 +0200
Committer
 Syndamia <kamen@syndamia.com>
2023-02-07 22:06:33 +0200
Files8579c3e2ec0675c8222a4684d1e4ea6177413f31 /Year 2/Implementation of Programming Languages/Transpiler/src/LLVMVisitor/LLVMVisitor.cpp
uni-projects-95dfe7c4df8482c7b83a816917cb27605ceb3076.tar
uni-projects-95dfe7c4df8482c7b83a816917cb27605ceb3076.tar.gz
uni-projects-95dfe7c4df8482c7b83a816917cb27605ceb3076.zip
Parent7913fe2fd73b11f8b1b13d8b3e65aca66dc3282c (diff)
[IPL/T] Implemented * and /
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 238c2f6..d6cdf89 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
@@ -97,14 +97,22 @@ LLVMRet LLVMVisitor::aritop(const std::string name, const std::vector<Value*>& a
return { leftRet.type, *r };
}
-LLVMRet LLVMVisitor::f_add(const std::vector<Value*>& args) {
+LLVMRet LLVMVisitor::f_add(funcargs args) {
return aritop("add", args);
}
-LLVMRet LLVMVisitor::f_sub(const std::vector<Value*>& args) {
+LLVMRet LLVMVisitor::f_sub(funcargs args) {
return aritop("sub", args);
}
+LLVMRet LLVMVisitor::f_mul(funcargs args) {
+ return aritop("mul", args);
+}
+
+LLVMRet LLVMVisitor::f_div(funcargs args) {
+ return aritop("div", args);
+}
+
LLVMRet LLVMVisitor::Visit(const Funcall& vfuncall) {
// Direct functions generate their own LLVM IR
auto directFuncIt = funcs_direct.find(vfuncall.get_funname());
@@ -140,6 +148,8 @@ LLVMVisitor::LLVMVisitor(const char* fileName) : outFile(std::ofstream(fileName)
funcs_direct.insert({"+", &LLVMVisitor::f_add});
funcs_direct.insert({"-", &LLVMVisitor::f_sub});
+ funcs_direct.insert({"*", &LLVMVisitor::f_mul});
+ funcs_direct.insert({"/", &LLVMVisitor::f_div});
funcs_direct.insert({"defun", &LLVMVisitor::f_defun});
funcs_direct.insert({"defvar", &LLVMVisitor::f_defvar});
}