mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-15 23:04:09 +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,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;
|
||||||
|
if (mCurMethodState->mDeferredLocalAssignData != NULL)
|
||||||
|
{
|
||||||
|
SetAndRestoreValue<bool> prevIsIfCondition(mCurMethodState->mDeferredLocalAssignData->mIsIfCondition, true);
|
||||||
|
SetAndRestoreValue<bool> prevIfMayBeSkipped(mCurMethodState->mDeferredLocalAssignData->mIfMayBeSkipped, true);
|
||||||
exprEvaluator.Evaluate(expr);
|
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);
|
||||||
|
if (mCurMethodState->mDeferredLocalAssignData != NULL)
|
||||||
|
{
|
||||||
|
SetAndRestoreValue<bool> prevIsIfCondition(mCurMethodState->mDeferredLocalAssignData->mIsIfCondition, true);
|
||||||
|
SetAndRestoreValue<bool> prevIfMayBeSkipped(mCurMethodState->mDeferredLocalAssignData->mIfMayBeSkipped, true);
|
||||||
exprEvaluator.MarkResultAssigned();
|
exprEvaluator.MarkResultAssigned();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
exprEvaluator.MarkResultAssigned();
|
||||||
|
}
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue