Summary Files Commits Branches @commit @diff @stats
path: root / Year 2 / Implementation of Programming Languages / Transpiler / src / main.cpp
diff options
context:
space:
mode:
Commit65b85d46c6d61534906dc019731afabd45caf5cf (patch)
Author
 Syndamia <kamen@syndamia.com>
2023-02-08 00:35:05 +0200
Committer
 Syndamia <kamen@syndamia.com>
2023-02-08 00:35:05 +0200
Files4224af821c9dda1f01c25cba13f80d8908f7ab0e /Year 2/Implementation of Programming Languages/Transpiler/src/main.cpp
uni-projects-65b85d46c6d61534906dc019731afabd45caf5cf.tar
uni-projects-65b85d46c6d61534906dc019731afabd45caf5cf.tar.gz
uni-projects-65b85d46c6d61534906dc019731afabd45caf5cf.zip
Parentb8d2ea4f75c21b46f37310e94d2409290b35469a (diff)
[IPL/T] Memory is now being freed up
1 files changed, 15 insertions, 0 deletions
-rw-r--r--Year 2/Implementation of Programming Languages/Transpiler/src/main.cpp15
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 cc5d771..bc651e6 100644
--- a/Year 2/Implementation of Programming Languages/Transpiler/src/main.cpp
+++ b/Year 2/Implementation of Programming Languages/Transpiler/src/main.cpp
@@ -2,6 +2,18 @@
#include <deque>
#include "LLVMVisitor/LLVMVisitor.h"
+void freeNodes(Value* v) {
+ if (dynamic_cast<Funcall*>(v) != nullptr) {
+ for (Value* val : static_cast<Funcall*>(v)->get_args())
+ freeNodes(val);
+ }
+ else if (dynamic_cast<List*>(v) != nullptr) {
+ for (Value* val : static_cast<List*>(v)->get_value())
+ freeNodes(val);
+ }
+ delete v;
+}
+
int main() {
LLVMVisitor visitor("testout.ll");
std::deque<Value*> nodes = {
@@ -32,4 +44,7 @@ int main() {
n->Visit(visitor);
}
visitor.insertMain();
+
+ for (Value* n : nodes)
+ freeNodes(n);
}