#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; } }