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:
parent
c939ec1cf6
commit
7f1d8803d9
2 changed files with 6 additions and 0 deletions
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue