Rework evaluation to use shared pointers, fix bugs

This commit is contained in:
2019-06-01 21:38:39 +02:00
parent 4408cf00cd
commit 6206fef4c5
17 changed files with 122 additions and 133 deletions

View File

@@ -20,7 +20,7 @@ public:
return ! (this->operator==(b));
}
virtual EvalValue* Clone() = 0;
virtual shared_ptr<EvalValue> Clone() = 0;
virtual long EvaluateInteger(){
throw EvaluationException("Can't evaluate this EvalValue as integer.");
@@ -45,8 +45,8 @@ public:
_type = std::make_shared<ScriptType>(TypeClass::Bool);
}
EvalValue* Clone() final{
return new BooleanEvalValue(_value);
shared_ptr<EvalValue> Clone() final{
return make_shared<BooleanEvalValue>(_value);
}
std::shared_ptr<ScriptType> GetType() final{

View File

@@ -48,8 +48,8 @@ public:
return strs.str();
}
EvalValue* Clone() final{
return new IntegerEvalValue(_value);
shared_ptr<EvalValue> Clone() final{
return make_shared<IntegerEvalValue>(_value);
}
};
@@ -76,8 +76,8 @@ public:
return strs.str();
}
EvalValue* Clone() final{
return new FloatEvalValue(_value);
shared_ptr<EvalValue> Clone() final{
return make_shared<FloatEvalValue>(_value);
}
};

View File

@@ -25,10 +25,11 @@ public:
return _type;
}
EvalValue* Clone() final{
return new ScriptFunctionEvalValue(_innerBlock, _type);
shared_ptr<EvalValue> Clone() final{
return make_shared<ScriptFunctionEvalValue>(_innerBlock, _type);
}
bool operator ==(EvalValue* b) final{
if (b->GetType()->GetClass() != TypeClass::Function)
return false;

View File

@@ -29,8 +29,8 @@ public:
return _value;
}
EvalValue* Clone() final{
return new StringEvalValue(_value);
shared_ptr<EvalValue> Clone() final{
return make_shared<StringEvalValue>(_value);
}
};