#ifndef PORYGONLANG_SCRIPT_HPP #define PORYGONLANG_SCRIPT_HPP #include #include #include #include "Diagnostics/DiagnosticsHolder.hpp" #include "Binder/BoundStatements/BoundStatement.hpp" class Script; class Evaluator; #include "Evaluator/Evaluator.hpp" #include "Evaluator/EvalValues/EvalValue.hpp" #include "Utilities/HashedString.hpp" using namespace std; class Script { friend class Evaluator; Evaluator* _evaluator; unordered_map>* _scriptVariables; BoundScriptStatement* _boundScript; shared_ptr _returnType; explicit Script(); void Parse(const u16string& script); public: static Script* Create(const u16string& script); static Script* Create(const string& script); DiagnosticsHolder* Diagnostics; ~Script(); shared_ptr GetReturnType(){ return _returnType; } void SetReturnType(shared_ptr t){ _returnType = t; } EvalValue* Evaluate(); EvalValue* GetLastValue(); EvalValue* GetVariable(const u16string& key); bool HasVariable(const u16string& key); shared_ptr CallFunction(const u16string& key, const vector& variables); bool HasFunction(const u16string& key); }; #endif //PORYGONLANG_SCRIPT_HPP