From ee7c057e25f2634b67fc01135b9f823ab5f069a4 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Sun, 10 Jul 2022 15:52:03 -0400 Subject: [PATCH] Perform CheckModifyResult in ??= --- IDEHelper/Compiler/BfExprEvaluator.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index f0a71905..0a64071e 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -20321,9 +20321,16 @@ void BfExprEvaluator::PerformAssignment(BfAssignmentExpression* assignExpr, bool leftValue = mModule->LoadValue(leftValue); - if ((binaryOp == BfBinaryOp_NullCoalesce) && (PerformBinaryOperation_NullCoalesce(assignExpr->mOpToken, assignExpr->mLeft, assignExpr->mRight, leftValue, leftValue.mType, &ptr))) + if (binaryOp == BfBinaryOp_NullCoalesce) { - return; + if (!CheckModifyResult(ptr, assignExpr->mOpToken, "assign to", false, false, true)) + { + mModule->CreateValueFromExpression(assignExpr->mRight, ptr.mType, (BfEvalExprFlags)(BfEvalExprFlags_AllowSplat | BfEvalExprFlags_NoCast)); + mResult = leftValue; + return; + } + if (PerformBinaryOperation_NullCoalesce(assignExpr->mOpToken, assignExpr->mLeft, assignExpr->mRight, leftValue, leftValue.mType, &ptr)) + return; } PerformBinaryOperation(assignExpr->mLeft, assignExpr->mRight, binaryOp, assignExpr->mOpToken, flags, leftValue, rightValue);