From e913f8d052246f2f6b6e563afa687486064258ce Mon Sep 17 00:00:00 2001 From: Deukhoofd Date: Sat, 24 Aug 2019 15:12:09 +0200 Subject: [PATCH] Allow passing custom scriptoptions --- src/Script.cpp | 12 ++++++------ src/Script.hpp | 6 +++--- src/ScriptOptions.cpp | 24 ++++++++++++++++++++++++ 3 files changed, 33 insertions(+), 9 deletions(-) diff --git a/src/Script.cpp b/src/Script.cpp index 260a46c..56e2106 100644 --- a/src/Script.cpp +++ b/src/Script.cpp @@ -8,8 +8,8 @@ #include "Binder/Binder.hpp" #include "EvaluateResult.hpp" -Porygon::Script* Porygon::Script::Create(const u16string& script) { - return new Script(script); +Porygon::Script* Porygon::Script::Create(const u16string& script, ScriptOptions* options) { + return new Script(script, options); } std::u16string To_UTF16(const string &s) @@ -17,16 +17,16 @@ std::u16string To_UTF16(const string &s) std::wstring_convert, char16_t> conv; return conv.from_bytes(s); } -Porygon::Script *Porygon::Script::Create(const string &script) { - return Script::Create(To_UTF16(script)); +Porygon::Script *Porygon::Script::Create(const string &script, ScriptOptions* options) { + return Script::Create(To_UTF16(script), options); } -Porygon::Script::Script(const u16string& s) +Porygon::Script::Script(const u16string& s, ScriptOptions* options) : Diagnostics(make_shared(s)), _boundScript(nullptr), _scriptVariables(new map()), _scriptTypes(new unordered_map>{}), - _scriptOptions(nullptr) + _scriptOptions(options) { _evaluator = new Evaluator(this -> _scriptVariables, this -> GetScriptOptions()); this -> Parse(s); diff --git a/src/Script.hpp b/src/Script.hpp index 9f66cce..402d0fd 100644 --- a/src/Script.hpp +++ b/src/Script.hpp @@ -24,14 +24,14 @@ namespace Porygon{ shared_ptr _returnType = nullptr; ScriptOptions* _scriptOptions; - explicit Script(const u16string&); + explicit Script(const u16string&, ScriptOptions*); Script(shared_ptr boundScript, shared_ptr diagnostics); void Parse(const u16string& script); public: shared_ptr Diagnostics; - static Script* Create(const u16string& script); - static Script* Create(const string& script); + static Script* Create(const u16string& script, ScriptOptions* = nullptr); + static Script* Create(const string& script, ScriptOptions* = nullptr); static Script* Clone(const Script* script); ~Script(); diff --git a/src/ScriptOptions.cpp b/src/ScriptOptions.cpp index 88d9316..70b08bf 100644 --- a/src/ScriptOptions.cpp +++ b/src/ScriptOptions.cpp @@ -31,4 +31,28 @@ extern "C"{ void SetDefaultPrintFunc(void (*func)(const char16_t*)){ Porygon::ScriptOptions::GetDefaultScriptOptions()->SetPrintFunc(func); } + + void SetDefaultModuleExists(bool (*func)(const std::string& moduleName)){ + Porygon::ScriptOptions::GetDefaultScriptOptions()->SetModuleExistsFunc(func); + } + + void SetDefaultResolveModule(Porygon::Script * (*func)(const std::string& moduleName)){ + Porygon::ScriptOptions::GetDefaultScriptOptions()->SetResolveModuleFunc(func); + } + + Porygon::ScriptOptions* CreateOptions(){ + return new Porygon::ScriptOptions(); + } + + void SetOptionPrintFunc(Porygon::ScriptOptions* opt, void (*func)(const char16_t*)){ + opt->SetPrintFunc(func); + } + + void SetOptionModuleExistsFunc(Porygon::ScriptOptions* opt, bool (*func)(const std::string& moduleName)){ + opt->SetModuleExistsFunc(func); + } + + void SetOptionResolveModuleFunc(Porygon::ScriptOptions* opt, bool (*func)(const std::string& moduleName)){ + opt->SetModuleExistsFunc(func); + } } \ No newline at end of file