From 4c499cc498fd59876b1cdf36576e86e57a040c70 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Wed, 16 Feb 2022 07:18:04 -0500 Subject: [PATCH] Fixed assign error checking to allow '+=' operator call --- IDEHelper/Compiler/BfExprEvaluator.cpp | 35 +++++++++++--------------- 1 file changed, 14 insertions(+), 21 deletions(-) diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index a506ecf2..9a0819ca 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -18755,16 +18755,7 @@ void BfExprEvaluator::PerformAssignment(BfAssignmentExpression* assignExpr, bool ResolveGenericType(); auto ptr = mResult; mResult = BfTypedValue(); - if (mPropDef == NULL) - { - if (!CheckModifyResult(ptr, assignExpr->mOpToken, "assign to", false, false, true)) - { - if (assignExpr->mRight != NULL) - mModule->CreateValueFromExpression(assignExpr->mRight, ptr.mType, BfEvalExprFlags_NoCast); - return; - } - } - + if (mPropDef != NULL) { bool hasLeftVal = false; @@ -18956,8 +18947,7 @@ void BfExprEvaluator::PerformAssignment(BfAssignmentExpression* assignExpr, bool rightValue = mModule->CreateValueFromExpression(assignExpr->mRight, expectedType, (BfEvalExprFlags)(BfEvalExprFlags_AllowSplat | BfEvalExprFlags_NoCast)); } } - - bool handled = false; + BfResolvedArgs argValues; if ((rightValue) || (deferBinop)) @@ -18966,8 +18956,8 @@ void BfExprEvaluator::PerformAssignment(BfAssignmentExpression* assignExpr, bool auto opResult = PerformAssignment_CheckOp(assignExpr, deferBinop, leftValue, rightValue, evaluatedRight); if (opResult) { - handled = true; - convVal = opResult; + mResult = opResult; + return; } else { @@ -18982,15 +18972,12 @@ void BfExprEvaluator::PerformAssignment(BfAssignmentExpression* assignExpr, bool return; } - PerformBinaryOperation(assignExpr->mLeft, assignExpr->mRight, binaryOp, assignExpr->mOpToken, flags, leftValue, rightValue); + PerformBinaryOperation(assignExpr->mLeft, assignExpr->mRight, binaryOp, assignExpr->mOpToken, flags, leftValue, rightValue); } } - - if (!handled) - { - convVal = mResult; - mResult = BfTypedValue(); - } + + convVal = mResult; + mResult = BfTypedValue(); if (!convVal) return; @@ -19039,6 +19026,12 @@ void BfExprEvaluator::PerformAssignment(BfAssignmentExpression* assignExpr, bool } } } + + if (!CheckModifyResult(ptr, assignExpr->mOpToken, "assign to", false, false, true)) + { + mResult = convVal; + return; + } BF_ASSERT(convVal); if ((convVal) && (convVal.mType->IsNull()) && (ptr.mType->IsNullable()))