1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-10 04:22:20 +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->mLocalVarStart = (int)mCurMethodState->mLocals.size();
mCurMethodState->mCurScope->mBlock = mBfIRBuilder->MaybeChainNewBlock((!mCurMethodState->mCurScope->mLabel.empty()) ? mCurMethodState->mCurScope->mLabel : "newScope"); mCurMethodState->mCurScope->mBlock = mBfIRBuilder->MaybeChainNewBlock((!mCurMethodState->mCurScope->mLabel.empty()) ? mCurMethodState->mCurScope->mLabel : "newScope");
mCurMethodState->mCurScope->mMixinState = mCurMethodState->mMixinState;
} }
void BfModule::RestoreScoreState_LocalVariables() void BfModule::RestoreScoreState_LocalVariables()
@ -14708,6 +14709,8 @@ void BfModule::EmitDeferredScopeCalls(bool useSrcPositions, BfScopeData* scopeDa
{ {
if (deferredCallEntry->mDeferredBlock != NULL) if (deferredCallEntry->mDeferredBlock != NULL)
{ {
SetAndRestoreValue<BfMixinState*> prevMixinState(mCurMethodState->mMixinState, checkScope->mMixinState);
if (checkScope == &mCurMethodState->mHeadScope) if (checkScope == &mCurMethodState->mHeadScope)
CreateRetValLocal(); CreateRetValLocal();
@ -14868,6 +14871,7 @@ void BfModule::EmitDeferredScopeCalls(bool useSrcPositions, BfScopeData* scopeDa
deferredCallEmitState.mCloseNode = deferCloseNode; deferredCallEmitState.mCloseNode = deferCloseNode;
SetAndRestoreValue<BfDeferredCallEmitState*> prevDeferredCallEmitState(mCurMethodState->mDeferredCallEmitState, &deferredCallEmitState); SetAndRestoreValue<BfDeferredCallEmitState*> prevDeferredCallEmitState(mCurMethodState->mDeferredCallEmitState, &deferredCallEmitState);
SetAndRestoreValue<bool> prevIgnoredWrites(mBfIRBuilder->mIgnoreWrites, deferredCallEntry->mIgnored); SetAndRestoreValue<bool> prevIgnoredWrites(mBfIRBuilder->mIgnoreWrites, deferredCallEntry->mIgnored);
SetAndRestoreValue<BfMixinState*> prevMixinState(mCurMethodState->mMixinState, checkScope->mMixinState);
if (deferCloseNode != NULL) if (deferCloseNode != NULL)
{ {

View file

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