#include #include #include "LLVMVisitor/LLVMVisitor.h" void freeNodes(Value* v) { if (dynamic_cast(v) != nullptr) { for (Value* val : static_cast(v)->get_args()) freeNodes(val); } else if (dynamic_cast(v) != nullptr) { for (Value* val : static_cast(v)->get_value()) freeNodes(val); } delete v; } int main() { LLVMVisitor visitor("testout.ll"); std::deque nodes = { new Funcall("defvar", { new Name("myvar"), new Integer(19) }), new Funcall("+", { new Float(1), new Funcall("-", { new Float(5), new Float(10) }), new Float(2), new Float(123) }), new Funcall("defun", { new Name("notfun"), new List({new Name("a"), new Name("b")}), new Funcall("+", { new Integer(7), new Name("a"), new Name("b") }), new Funcall("if", { new Funcall(">=", { new Integer(5), new Integer(6) }), new Funcall("+", { new Integer(1), new Integer(2) }), new Funcall("-", { new Integer(3), new Integer(4) }) })}) }; for (Value* n : nodes) { n->Visit(visitor); } visitor.insertMain(); for (Value* n : nodes) freeNodes(n); }