mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-10 12:32:20 +02:00
Treat enum match out values as conditional assignments
This commit is contained in:
parent
56f0f3e4f2
commit
f38cf6a1fd
1 changed files with 21 additions and 3 deletions
|
@ -2395,12 +2395,21 @@ void BfModule::HandleCaseEnumMatch_Tuple(BfTypedValue tupleVal, const BfSizedArr
|
|||
BfExprEvaluator exprEvaluator(this);
|
||||
exprEvaluator.mExpectingType = tupleFieldInstance->GetResolvedType();
|
||||
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)
|
||||
matchedBlockEnd = mBfIRBuilder->GetInsertBlock();
|
||||
if (isFalseBlockEnd)
|
||||
falseBlockEnd = mBfIRBuilder->GetInsertBlock();
|
||||
auto argValue = exprEvaluator.mResult;
|
||||
auto argValue = exprEvaluator.mResult;
|
||||
if (!argValue)
|
||||
continue;
|
||||
|
||||
|
@ -2417,7 +2426,16 @@ void BfModule::HandleCaseEnumMatch_Tuple(BfTypedValue tupleVal, const BfSizedArr
|
|||
|
||||
DeferredAssign deferredAssign = { expr, argValue, tupleElement, tupleFieldIdx };
|
||||
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;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue