Added equality operation for eval values
This commit is contained in:
@@ -11,6 +11,12 @@ public:
|
||||
virtual ~EvalValue() = default;
|
||||
virtual ScriptType* GetType() = 0;
|
||||
|
||||
virtual bool operator ==(EvalValue* b) = 0;
|
||||
|
||||
virtual bool operator !=(EvalValue*b){
|
||||
return ! (this->operator==(b));
|
||||
}
|
||||
|
||||
virtual long EvaluateInteger(){
|
||||
throw EvaluationException("Can't evaluate this EvalValue as integer.");
|
||||
}
|
||||
@@ -45,6 +51,12 @@ public:
|
||||
bool EvaluateBool() final{
|
||||
return _value;
|
||||
}
|
||||
|
||||
bool operator ==(EvalValue* b) final{
|
||||
if (b->GetType()->GetClass() != TypeClass::Bool)
|
||||
return false;
|
||||
return this->EvaluateBool() == b->EvaluateBool();
|
||||
};
|
||||
};
|
||||
|
||||
#endif //PORYGONLANG_EVALVALUE_HPP
|
||||
|
||||
@@ -64,3 +64,17 @@ NumericEvalValue *NumericEvalValue::operator/(NumericEvalValue *b) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool NumericEvalValue::operator==(EvalValue *b) {
|
||||
if (b->GetType()->GetClass() != TypeClass::Number)
|
||||
return false;
|
||||
auto numVal = (NumericEvalValue*)b;
|
||||
if (this->IsFloat() != numVal->IsFloat())
|
||||
return false;
|
||||
|
||||
if (this->IsFloat()){
|
||||
return this->EvaluateFloat() == numVal->EvaluateFloat();
|
||||
} else{
|
||||
return this->EvaluateInteger() == numVal->EvaluateInteger();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@ public:
|
||||
NumericEvalValue* operator -(NumericEvalValue* b);
|
||||
NumericEvalValue* operator *(NumericEvalValue* b);
|
||||
NumericEvalValue* operator /(NumericEvalValue* b);
|
||||
bool operator ==(EvalValue* b) final;
|
||||
};
|
||||
|
||||
class IntegerEvalValue : public NumericEvalValue{
|
||||
|
||||
Reference in New Issue
Block a user