2019-05-25 12:59:12 +00:00
|
|
|
|
|
|
|
#include "EvalValues/NumericEvalValue.hpp"
|
|
|
|
#include "Evaluator.hpp"
|
|
|
|
#include "EvaluationException.hpp"
|
|
|
|
#include "../Script.hpp"
|
|
|
|
|
|
|
|
NumericEvalValue *Evaluator::EvaluateIntegerUnary(BoundUnaryExpression *expression) {
|
|
|
|
switch (expression->GetOperation()){
|
|
|
|
case BoundUnaryOperation::Negation:
|
|
|
|
{
|
|
|
|
auto operandValue = EvaluateIntegerExpression(expression->GetOperand());
|
|
|
|
if (operandValue->IsFloat()){
|
|
|
|
double f = operandValue->EvaluateFloat();
|
|
|
|
delete operandValue;
|
|
|
|
return new FloatEvalValue(-f);
|
|
|
|
} else{
|
|
|
|
long l = operandValue->EvaluateInteger();
|
|
|
|
delete operandValue;
|
|
|
|
return new IntegerEvalValue(-l);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
case BoundUnaryOperation::LogicalNegation:
|
|
|
|
throw;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
BooleanEvalValue *Evaluator::EvaluateBooleanUnary(BoundUnaryExpression *expression) {
|
|
|
|
switch (expression->GetOperation()){
|
|
|
|
case BoundUnaryOperation::LogicalNegation:
|
|
|
|
{
|
|
|
|
auto val = EvaluateBoolExpression(expression->GetOperand());
|
|
|
|
bool b = val->EvaluateBool();
|
|
|
|
delete val;
|
|
|
|
return new BooleanEvalValue(!b);
|
|
|
|
}
|
|
|
|
case BoundUnaryOperation::Negation:
|
|
|
|
throw;
|
|
|
|
}
|
2019-05-29 12:55:03 +00:00
|
|
|
}
|
2019-06-01 10:33:52 +00:00
|
|
|
|