1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-08 11:38:21 +02:00

Fixed split deferred call processor

This commit is contained in:
Brian Fiete 2022-08-24 14:49:05 -07:00
parent e09b701e9f
commit acb644830c
6 changed files with 97 additions and 8 deletions

View file

@ -2006,9 +2006,12 @@ void BfModule::RestoreScopeState()
}
}
mCurMethodState->mCurScope->mDone = true;
if (!mCurMethodState->mLeftBlockUncond)
EmitDeferredScopeCalls(true, mCurMethodState->mCurScope);
EmitDeferredCallProcessorInstances(mCurMethodState->mCurScope);
RestoreScoreState_LocalVariables();
if (mCurMethodState->mCurScope->mValueScopeStart)
@ -16017,7 +16020,7 @@ void BfModule::EmitDeferredScopeCalls(bool useSrcPositions, BfScopeData* scopeDa
}
auto prevHead = checkScope->mDeferredCallEntries.mHead;
EmitDeferredCall(*deferredCallEntry, true);
EmitDeferredCall(checkScope, *deferredCallEntry, true);
if (prevHead != checkScope->mDeferredCallEntries.mHead)
{
// The list changed, start over and ignore anything we've already handled
@ -16028,7 +16031,7 @@ void BfModule::EmitDeferredScopeCalls(bool useSrcPositions, BfScopeData* scopeDa
}
else
{
EmitDeferredCall(*deferredCallEntry, true);
EmitDeferredCall(checkScope, *deferredCallEntry, true);
deferredCallEntry = deferredCallEntry->mNext;
}
}
@ -21819,12 +21822,15 @@ void BfModule::ProcessMethod(BfMethodInstance* methodInstance, bool isInlineDup,
AssertErrorState();
}
mCurMethodState->mHeadScope.mDone = true;
if (!mCurMethodState->mHadReturn)
{
// Clear off the stackallocs that have occurred after a scopeData break
EmitDeferredScopeCalls(false, &mCurMethodState->mHeadScope, mCurMethodState->mIRExitBlock);
}
EmitDeferredCallProcessorInstances(&mCurMethodState->mHeadScope);
if (mCurMethodState->mIRExitBlock)
{
for (auto preExitBlock : mCurMethodState->mHeadScope.mAtEndBlocks)