diff --git a/src/Evaluator/Evaluator.cpp b/src/Evaluator/Evaluator.cpp index c5130ce..c70e723 100644 --- a/src/Evaluator/Evaluator.cpp +++ b/src/Evaluator/Evaluator.cpp @@ -267,13 +267,17 @@ namespace Porygon::Evaluation { } EvalValuePointer Evaluator::EvaluateBinary(const BoundBinaryExpression *expression){ - auto leftValue = this -> EvaluateExpression(expression->GetLeft()); - auto rightValue = this -> EvaluateExpression(expression->GetRight()); auto operation = expression->GetOperation(); + auto leftValue = this -> EvaluateExpression(expression->GetLeft()); + if (operation == BoundBinaryOperation::LogicalAnd){ + if (!leftValue->EvaluateBool()) + return new BooleanEvalValue(false); + } + auto rightValue = this -> EvaluateExpression(expression->GetRight()); if (operation == BoundBinaryOperation::Equality){ - return new BooleanEvalValue(leftValue == rightValue); + return new BooleanEvalValue(leftValue->operator==(rightValue.Get())); } else if (operation == BoundBinaryOperation::Inequality){ - return new BooleanEvalValue(leftValue != rightValue); + return new BooleanEvalValue(leftValue->operator!=(rightValue.Get())); } return leftValue->BinaryOperation(operation, rightValue.Get()); }