mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-10 12:32:20 +02:00
Fixes to variable assignment detection
This commit is contained in:
parent
5277797d73
commit
4d1d972599
3 changed files with 60 additions and 19 deletions
|
@ -5054,19 +5054,27 @@ void BfModule::Visit(BfSwitchStatement* switchStmt)
|
|||
if (switchCase->mCodeBlock != NULL)
|
||||
{
|
||||
isComprehensive = true;
|
||||
UpdateSrcPos(switchCase->mCodeBlock);
|
||||
|
||||
UpdateSrcPos(switchCase->mCodeBlock);
|
||||
|
||||
deferredLocalAssignDataVec[blockIdx].mScopeData = mCurMethodState->mCurScope;
|
||||
deferredLocalAssignDataVec[blockIdx].ExtendFrom(mCurMethodState->mDeferredLocalAssignData);
|
||||
SetAndRestoreValue<BfDeferredLocalAssignData*> prevDLA(mCurMethodState->mDeferredLocalAssignData, &deferredLocalAssignDataVec[blockIdx]);
|
||||
mCurMethodState->mDeferredLocalAssignData->mVarIdBarrier = startingLocalVarId;
|
||||
|
||||
BfScopeData caseScopeData;
|
||||
caseScopeData.mOuterIsConditional = true;
|
||||
caseScopeData.mIsSharedTempBlock = true;
|
||||
mCurMethodState->AddScope(&caseScopeData);
|
||||
NewScopeState();
|
||||
|
||||
bool hadReturn = false;
|
||||
VisitCodeBlock(switchCase->mCodeBlock, BfIRBlock(), endBlock, BfIRBlock(), true, &hadReturn, switchStmt->mLabelNode);
|
||||
deferredLocalAssignDataVec[blockIdx].mHadReturn = hadReturn;
|
||||
caseCount++;
|
||||
if (!hadReturn)
|
||||
allHadReturns = false;
|
||||
|
||||
RestoreScopeState();
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -5796,9 +5804,12 @@ void BfModule::Visit(BfRepeatStatement* repeatStmt)
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
RestoreScopeState();
|
||||
|
||||
prevDLA.Restore();
|
||||
mCurMethodState->ApplyDeferredLocalAssignData(deferredLocalAssignData);
|
||||
|
||||
if (isInfiniteLoop)
|
||||
EmitDefaultReturn();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue