diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index 04639ce0..87b7d97f 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -3410,6 +3410,16 @@ bool BfExprEvaluator::IsComptimeEntry() return ((mBfEvalExprFlags & BfEvalExprFlags_Comptime) != 0); } +void BfExprEvaluator::EnsureResultNotConstant() +{ + if ((mResult.mValue.IsConst()) && (!mResult.mType->IsValuelessType())) + { + auto newTypedValue = mModule->GetDefaultTypedValue(mResult.mType, true, Beefy::BfDefaultValueKind_Addr); + mModule->mBfIRBuilder->CreateStore(mResult.mValue, newTypedValue.mValue); + mResult = newTypedValue; + } +} + int BfExprEvaluator::GetStructRetIdx(BfMethodInstance* methodInstance, bool forceStatic) { if (IsComptime()) @@ -25374,6 +25384,7 @@ void BfExprEvaluator::PerformBinaryOperation(BfAstNode* leftExpression, BfAstNod if (needNewCheck) { PerformBinaryOperation(leftExpression, rightExpression, binaryOp, opToken, flags, newLeftValue, newRightValue); + EnsureResultNotConstant(); return; } } diff --git a/IDEHelper/Compiler/BfExprEvaluator.h b/IDEHelper/Compiler/BfExprEvaluator.h index 8e54a346..13b356f5 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.h +++ b/IDEHelper/Compiler/BfExprEvaluator.h @@ -458,6 +458,7 @@ public: bool IsComptime(); bool IsConstEval(); bool IsComptimeEntry(); + void EnsureResultNotConstant(); int GetStructRetIdx(BfMethodInstance* methodInstance, bool forceStatic = false); BfTypedValue SetupNullConditional(BfTypedValue target, BfTokenNode* dotToken); void Evaluate(BfAstNode* astNode, bool propogateNullConditional = false, bool ignoreNullConditional = false, bool allowSplat = true);