From af5c3b03f8f7264dcb996818dddc2e458ccf59bc Mon Sep 17 00:00:00 2001 From: Gunnar Beutner Date: Wed, 23 Sep 2015 10:36:57 +0200 Subject: [PATCH] Remove unnecessary MakeLiteral calls in SetExpression::DoEvaluate fixes #10199 --- lib/config/expression.cpp | 27 ++++++++------------------- 1 file changed, 8 insertions(+), 19 deletions(-) diff --git a/lib/config/expression.cpp b/lib/config/expression.cpp index 171078289..aec862c3c 100644 --- a/lib/config/expression.cpp +++ b/lib/config/expression.cpp @@ -482,41 +482,30 @@ ExpressionResult SetExpression::DoEvaluate(ScriptFrame& frame, DebugHint *dhint) if (m_Op != OpSetLiteral) { Value object = VMOps::GetField(parent, index, m_DebugInfo); - Expression *lhs = MakeLiteral(object); - Expression *rhs = MakeLiteral(operand2); - switch (m_Op) { case OpSetAdd: - operand2 = AddExpression(lhs, rhs, m_DebugInfo).Evaluate(frame, dhint); - CHECK_RESULT(operand2); + operand2 = object + operand2; break; case OpSetSubtract: - operand2 = SubtractExpression(lhs, rhs, m_DebugInfo).Evaluate(frame, dhint); - CHECK_RESULT(operand2); + operand2 = object - operand2; break; case OpSetMultiply: - operand2 = MultiplyExpression(lhs, rhs, m_DebugInfo).Evaluate(frame, dhint); - CHECK_RESULT(operand2); + operand2 = object * operand2; break; case OpSetDivide: - operand2 = DivideExpression(lhs, rhs, m_DebugInfo).Evaluate(frame, dhint); - CHECK_RESULT(operand2); + operand2 = object / operand2; break; case OpSetModulo: - operand2 = ModuloExpression(lhs, rhs, m_DebugInfo).Evaluate(frame, dhint); - CHECK_RESULT(operand2); + operand2 = object % operand2; break; case OpSetXor: - operand2 = XorExpression(lhs, rhs, m_DebugInfo).Evaluate(frame, dhint); - CHECK_RESULT(operand2); + operand2 = object ^ operand2; break; case OpSetBinaryAnd: - operand2 = BinaryAndExpression(lhs, rhs, m_DebugInfo).Evaluate(frame, dhint); - CHECK_RESULT(operand2); + operand2 = object & operand2; break; case OpSetBinaryOr: - operand2 = BinaryOrExpression(lhs, rhs, m_DebugInfo).Evaluate(frame, dhint); - CHECK_RESULT(operand2); + operand2 = object | operand2; break; default: VERIFY(!"Invalid opcode.");