PorygonLang/src/Script.hpp

59 lines
1.7 KiB
C++
Raw Normal View History

2019-05-21 10:59:15 +00:00
#ifndef PORYGONLANG_SCRIPT_HPP
#define PORYGONLANG_SCRIPT_HPP
#include <utility>
2019-05-21 10:59:15 +00:00
#include <string>
#include <map>
2019-06-06 17:01:54 +00:00
#include "Diagnostics/DiagnosticsHolder.hpp"
#include "Binder/BoundStatements/BoundStatement.hpp"
2019-05-23 16:50:09 +00:00
#include "Evaluator/Evaluator.hpp"
#include "Evaluator/EvalValues/EvalValue.hpp"
2019-05-28 15:49:03 +00:00
#include "Utilities/HashedString.hpp"
2019-05-21 10:59:15 +00:00
using namespace std;
using namespace Porygon::Evaluation;
2019-05-21 10:59:15 +00:00
namespace Porygon{
class Script {
Evaluator* _evaluator;
map<Utilities::HashedString, shared_ptr<EvalValue>>* _scriptVariables;
shared_ptr<Binder::BoundScriptStatement> _boundScript;
shared_ptr<ScriptType> _returnType;
2019-05-23 16:50:09 +00:00
2019-06-18 15:14:18 +00:00
explicit Script(const u16string&);
Script(shared_ptr<BoundScriptStatement> boundScript, shared_ptr<Diagnostics::DiagnosticsHolder> diagnostics);
void Parse(const u16string& script);
public:
shared_ptr<Diagnostics::DiagnosticsHolder> Diagnostics;
static Script* Create(const u16string& script);
static Script* Create(const string& script);
static Script* Clone(const Script* script);
2019-05-23 16:50:09 +00:00
~Script();
2019-05-21 12:15:39 +00:00
inline shared_ptr<ScriptType> GetReturnType(){
return _returnType;
}
2019-05-23 16:50:09 +00:00
inline void SetReturnType(shared_ptr<ScriptType> t){
_returnType = std::move(t);
}
2019-06-07 13:23:13 +00:00
EvalValue* Evaluate();
EvalValue* GetLastValue();
2019-05-23 16:50:09 +00:00
EvalValue* GetVariable(const u16string& key);
bool HasVariable(const u16string& key);
2019-05-28 15:49:03 +00:00
shared_ptr<EvalValue> CallFunction(const u16string& key, const vector<EvalValue*>& variables);
bool HasFunction(const u16string& key);
};
}
2019-05-21 10:59:15 +00:00
#endif //PORYGONLANG_SCRIPT_HPP