More valgrind fixes
Signed-off-by: Deukhoofd <deukhoofd@gmail.com>
This commit is contained in:
parent
907e444389
commit
97be8cded0
|
@ -1,3 +1,5 @@
|
||||||
|
#include <utility>
|
||||||
|
|
||||||
#include <utility>
|
#include <utility>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <iterator>
|
#include <iterator>
|
||||||
|
@ -23,7 +25,7 @@ Porygon::Script *Porygon::Script::Create(const string &script) {
|
||||||
}
|
}
|
||||||
|
|
||||||
Porygon::Script::Script(const u16string& s) {
|
Porygon::Script::Script(const u16string& s) {
|
||||||
Diagnostics = new Diagnostics::DiagnosticsHolder(s);
|
Diagnostics = make_shared<Diagnostics::DiagnosticsHolder>(s);
|
||||||
_boundScript = nullptr;
|
_boundScript = nullptr;
|
||||||
|
|
||||||
_scriptVariables = new map<Utilities::HashedString, shared_ptr<EvalValue>>();
|
_scriptVariables = new map<Utilities::HashedString, shared_ptr<EvalValue>>();
|
||||||
|
@ -33,12 +35,10 @@ Porygon::Script::Script(const u16string& s) {
|
||||||
}
|
}
|
||||||
|
|
||||||
EvalValue* Porygon::Script::Evaluate() {
|
EvalValue* Porygon::Script::Evaluate() {
|
||||||
return _evaluator->Evaluate(_boundScript);
|
return _evaluator->Evaluate(_boundScript.get());
|
||||||
}
|
}
|
||||||
|
|
||||||
Porygon::Script::~Script() {
|
Porygon::Script::~Script() {
|
||||||
delete this -> Diagnostics;
|
|
||||||
delete this -> _boundScript;
|
|
||||||
delete this -> _evaluator;
|
delete this -> _evaluator;
|
||||||
this->_scriptVariables->clear();
|
this->_scriptVariables->clear();
|
||||||
delete this->_scriptVariables;
|
delete this->_scriptVariables;
|
||||||
|
@ -56,7 +56,7 @@ void Porygon::Script::Parse(const u16string& script) {
|
||||||
if (!Diagnostics->HasErrors()){
|
if (!Diagnostics->HasErrors()){
|
||||||
map<Utilities::HashedString, BoundVariable*> scriptScope;
|
map<Utilities::HashedString, BoundVariable*> scriptScope;
|
||||||
auto bindScope = new BoundScope(&scriptScope);
|
auto bindScope = new BoundScope(&scriptScope);
|
||||||
this->_boundScript = Binder::Binder::Bind(this, parseResult, bindScope);
|
this->_boundScript = shared_ptr<BoundScriptStatement>(Binder::Binder::Bind(this, parseResult, bindScope));
|
||||||
for (const auto& v : scriptScope){
|
for (const auto& v : scriptScope){
|
||||||
this->_scriptVariables -> insert({v.first, nullptr});
|
this->_scriptVariables -> insert({v.first, nullptr});
|
||||||
delete v.second;
|
delete v.second;
|
||||||
|
@ -89,6 +89,23 @@ shared_ptr<EvalValue> Porygon::Script::CallFunction(const u16string &key, const
|
||||||
return this->_evaluator->EvaluateFunction(var, variables);
|
return this->_evaluator->EvaluateFunction(var, variables);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Porygon::Script *Porygon::Script::Clone(const Porygon::Script *script) {
|
||||||
|
auto s = new Script(script->_boundScript, script->Diagnostics);
|
||||||
|
for (auto v: *script->_scriptVariables){
|
||||||
|
s->_scriptVariables->insert({v.first, nullptr});
|
||||||
|
}
|
||||||
|
s->_returnType = script->_returnType;
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
Porygon::Script::Script(shared_ptr<BoundScriptStatement> boundScript,
|
||||||
|
shared_ptr<Porygon::Diagnostics::DiagnosticsHolder> diagnostics) {
|
||||||
|
_boundScript = std::move(boundScript);
|
||||||
|
Diagnostics = std::move(diagnostics);
|
||||||
|
_scriptVariables = new map<Utilities::HashedString, shared_ptr<EvalValue>>();
|
||||||
|
_evaluator = new Evaluator(_scriptVariables);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
Porygon::Script* CreateScript(char16_t * s){
|
Porygon::Script* CreateScript(char16_t * s){
|
||||||
|
|
|
@ -19,15 +19,18 @@ namespace Porygon{
|
||||||
class Script {
|
class Script {
|
||||||
Evaluator* _evaluator;
|
Evaluator* _evaluator;
|
||||||
map<Utilities::HashedString, shared_ptr<EvalValue>>* _scriptVariables;
|
map<Utilities::HashedString, shared_ptr<EvalValue>>* _scriptVariables;
|
||||||
Binder::BoundScriptStatement* _boundScript;
|
shared_ptr<Binder::BoundScriptStatement> _boundScript;
|
||||||
shared_ptr<ScriptType> _returnType;
|
shared_ptr<ScriptType> _returnType;
|
||||||
|
|
||||||
explicit Script(const u16string&);
|
explicit Script(const u16string&);
|
||||||
|
Script(shared_ptr<Binder::BoundScriptStatement> boundScript, shared_ptr<Diagnostics::DiagnosticsHolder> diagnostics);
|
||||||
void Parse(const u16string& script);
|
void Parse(const u16string& script);
|
||||||
public:
|
public:
|
||||||
|
shared_ptr<Diagnostics::DiagnosticsHolder> Diagnostics;
|
||||||
|
|
||||||
static Script* Create(const u16string& script);
|
static Script* Create(const u16string& script);
|
||||||
static Script* Create(const string& script);
|
static Script* Create(const string& script);
|
||||||
Diagnostics::DiagnosticsHolder* Diagnostics;
|
static Script* Clone(const Script* script);
|
||||||
|
|
||||||
~Script();
|
~Script();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue