diff options
| Commit | 07dfcf732fa7d88c196ad158ffa0326f757156b9 (patch) | |
|---|---|---|
| Author | 2023-01-19 14:56:29 +0200 | |
| Committer | 2023-01-19 14:56:29 +0200 | |
| Files | 078c1806ede25bed00196b7a6a6e43ef428e0069 | |
| uni-projects-07dfcf732fa7d88c196ad158ffa0326f757156b9.tar uni-projects-07dfcf732fa7d88c196ad158ffa0326f757156b9.tar.gz uni-projects-07dfcf732fa7d88c196ad158ffa0326f757156b9.zip | ||
| Parent | c42d553c7df6ae7073488cb971ea984932a86801 (diff) | |
[IPL/T] Added main entry point and constants are now directly passed
4 files changed, 10 insertions, 7 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 d0d8de3..c12bd09 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 @@ -4,18 +4,19 @@ LLVMVisitor::LLVMVisitor(const char* fileName) : outFile(std::ofstream(fileName)), reg() { if (!outFile.is_open()) throw std::runtime_error("Couldn't open file for writing!"); + outFile << "define i32 @main() {\n"; +} + +void LLVMVisitor::finalizeFile() { + outFile << "ret i32 0\n}\n"; } std::string LLVMVisitor::Visit(const Integer& vint) { - std::string valRegister = *(reg++); - outFile << valRegister + " = " + std::to_string(vint.get_value()) + "\n"; - return valRegister; + return std::to_string(vint.get_value()); } std::string LLVMVisitor::Visit(const Float& vfloat) { - std::string valRegister = *(reg++); - outFile << valRegister + " = " + std::to_string(vfloat.get_value()) + "\n"; - return valRegister; + return std::to_string(vfloat.get_value()); } void f_add(std::string reg, std::string first, std::string second, std::ofstream& of) { 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 f8fea5e..6229b7a 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 @@ -19,6 +19,7 @@ public: std::string Visit(const Float& vfloat); std::string Visit(const BuiltInFunction& bfun); + void finalizeFile(); LLVMVisitor(const char* fileName); }; diff --git a/Year 2/Implementation of Programming Languages/Transpiler/src/LLVMVisitor/Register.cpp b/Year 2/Implementation of Programming Languages/Transpiler/src/LLVMVisitor/Register.cpp index b2311d9..f352295 100644 --- a/Year 2/Implementation of Programming Languages/Transpiler/src/LLVMVisitor/Register.cpp +++ b/Year 2/Implementation of Programming Languages/Transpiler/src/LLVMVisitor/Register.cpp @@ -1,6 +1,6 @@ #include "Register.h" -Register::Register() : counter(0) {} +Register::Register() : counter(1) {} Register& Register::operator++() { ++counter; 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 a154c56..7f829d3 100644 --- a/Year 2/Implementation of Programming Languages/Transpiler/src/main.cpp +++ b/Year 2/Implementation of Programming Languages/Transpiler/src/main.cpp @@ -14,4 +14,5 @@ int main() { for (Value* n : nodes) { n->Visit(visitor); } + visitor.finalizeFile(); } |
