1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-15 06:44:10 +02:00

Treat enum match out values as conditional assignments

This commit is contained in:
Brian Fiete 2022-02-13 10:40:10 -05:00
parent 56f0f3e4f2
commit f38cf6a1fd

View file

@ -2395,7 +2395,16 @@ void BfModule::HandleCaseEnumMatch_Tuple(BfTypedValue tupleVal, const BfSizedArr
BfExprEvaluator exprEvaluator(this); BfExprEvaluator exprEvaluator(this);
exprEvaluator.mExpectingType = tupleFieldInstance->GetResolvedType(); exprEvaluator.mExpectingType = tupleFieldInstance->GetResolvedType();
exprEvaluator.mBfEvalExprFlags = BfEvalExprFlags_AllowOutExpr; exprEvaluator.mBfEvalExprFlags = BfEvalExprFlags_AllowOutExpr;
exprEvaluator.Evaluate(expr); if (mCurMethodState->mDeferredLocalAssignData != NULL)
{
SetAndRestoreValue<bool> prevIsIfCondition(mCurMethodState->mDeferredLocalAssignData->mIsIfCondition, true);
SetAndRestoreValue<bool> prevIfMayBeSkipped(mCurMethodState->mDeferredLocalAssignData->mIfMayBeSkipped, true);
exprEvaluator.Evaluate(expr);
}
else
{
exprEvaluator.Evaluate(expr);
}
if (isMatchedBlockEnd) if (isMatchedBlockEnd)
matchedBlockEnd = mBfIRBuilder->GetInsertBlock(); matchedBlockEnd = mBfIRBuilder->GetInsertBlock();
if (isFalseBlockEnd) if (isFalseBlockEnd)
@ -2417,7 +2426,16 @@ void BfModule::HandleCaseEnumMatch_Tuple(BfTypedValue tupleVal, const BfSizedArr
DeferredAssign deferredAssign = { expr, argValue, tupleElement, tupleFieldIdx }; DeferredAssign deferredAssign = { expr, argValue, tupleElement, tupleFieldIdx };
deferredAssigns.push_back(deferredAssign); deferredAssigns.push_back(deferredAssign);
exprEvaluator.MarkResultAssigned(); if (mCurMethodState->mDeferredLocalAssignData != NULL)
{
SetAndRestoreValue<bool> prevIsIfCondition(mCurMethodState->mDeferredLocalAssignData->mIsIfCondition, true);
SetAndRestoreValue<bool> prevIfMayBeSkipped(mCurMethodState->mDeferredLocalAssignData->mIfMayBeSkipped, true);
exprEvaluator.MarkResultAssigned();
}
else
{
exprEvaluator.MarkResultAssigned();
}
continue; continue;
} }