From 7f1d8803d9174aa1966d1bcf1ae572edc5f7e32d Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Sun, 31 Oct 2021 10:39:00 -0700 Subject: [PATCH] Restore original mixin state for deferred block emission --- IDEHelper/Compiler/BfModule.cpp | 4 ++++ IDEHelper/Compiler/BfModule.h | 2 ++ 2 files changed, 6 insertions(+) diff --git a/IDEHelper/Compiler/BfModule.cpp b/IDEHelper/Compiler/BfModule.cpp index b2479b81..c412d38a 100644 --- a/IDEHelper/Compiler/BfModule.cpp +++ b/IDEHelper/Compiler/BfModule.cpp @@ -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 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 prevDeferredCallEmitState(mCurMethodState->mDeferredCallEmitState, &deferredCallEmitState); SetAndRestoreValue prevIgnoredWrites(mBfIRBuilder->mIgnoreWrites, deferredCallEntry->mIgnored); + SetAndRestoreValue prevMixinState(mCurMethodState->mMixinState, checkScope->mMixinState); if (deferCloseNode != NULL) { diff --git a/IDEHelper/Compiler/BfModule.h b/IDEHelper/Compiler/BfModule.h index 9ca82a1c..61478905 100644 --- a/IDEHelper/Compiler/BfModule.h +++ b/IDEHelper/Compiler/BfModule.h @@ -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;