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

Restore original mixin state for deferred block emission

This commit is contained in:
Brian Fiete 2021-10-31 10:39:00 -07:00
parent c939ec1cf6
commit 7f1d8803d9
2 changed files with 6 additions and 0 deletions

View file

@ -1814,6 +1814,7 @@ void BfModule::NewScopeState(bool createLexicalBlock, bool flushValueScope)
}
mCurMethodState->mCurScope->mLocalVarStart = (int)mCurMethodState->mLocals.size();
mCurMethodState->mCurScope->mBlock = mBfIRBuilder->MaybeChainNewBlock((!mCurMethodState->mCurScope->mLabel.empty()) ? mCurMethodState->mCurScope->mLabel : "newScope");
mCurMethodState->mCurScope->mMixinState = mCurMethodState->mMixinState;
}
void BfModule::RestoreScoreState_LocalVariables()
@ -14708,6 +14709,8 @@ void BfModule::EmitDeferredScopeCalls(bool useSrcPositions, BfScopeData* scopeDa
{
if (deferredCallEntry->mDeferredBlock != NULL)
{
SetAndRestoreValue<BfMixinState*> prevMixinState(mCurMethodState->mMixinState, checkScope->mMixinState);
if (checkScope == &mCurMethodState->mHeadScope)
CreateRetValLocal();
@ -14868,6 +14871,7 @@ void BfModule::EmitDeferredScopeCalls(bool useSrcPositions, BfScopeData* scopeDa
deferredCallEmitState.mCloseNode = deferCloseNode;
SetAndRestoreValue<BfDeferredCallEmitState*> prevDeferredCallEmitState(mCurMethodState->mDeferredCallEmitState, &deferredCallEmitState);
SetAndRestoreValue<bool> prevIgnoredWrites(mBfIRBuilder->mIgnoreWrites, deferredCallEntry->mIgnored);
SetAndRestoreValue<BfMixinState*> prevMixinState(mCurMethodState->mMixinState, checkScope->mMixinState);
if (deferCloseNode != NULL)
{

View file

@ -423,6 +423,7 @@ public:
bool mIsDeferredBlock;
bool mAllowVariableDeclarations;
bool mInInitBlock;
BfMixinState* mMixinState;
BfBlock* mAstBlock;
BfAstNode* mCloseNode;
BfExprEvaluator* mExprEvaluator;
@ -445,6 +446,7 @@ public:
mPrevScope = NULL;
mLocalVarStart = 0;
mLabelNode = NULL;
mMixinState = NULL;
mAstBlock = NULL;
mCloseNode = NULL;
mExprEvaluator = NULL;