#include #include "Script.hpp" #include "Parser/Lexer.hpp" #include "Parser/Parser.hpp" #include "Binder/Binder.hpp" Script Script::Create(string script) { auto s = Script(); s.Parse(std::move(script)); return s; } Script::Script() { Diagnostics = new class Diagnostics(); _evaluator = new Evaluator(this); } void Script::Evaluate() { _evaluator->Evaluate(BoundScript); } Script::~Script() { delete this -> Diagnostics; delete this -> BoundScript; delete this -> _lastValue; delete this -> _evaluator; } void Script::Parse(string script) { auto lexer = Lexer(std::move(script), this); auto lexResult = lexer.Lex(); auto parser = Parser(lexResult, this); auto parseResult = parser.Parse(); for (auto token : lexResult){ delete token; } lexResult.clear(); if (!Diagnostics->HasErrors()){ this->BoundScript = Binder::Bind(this, parseResult); } delete parseResult; }