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

Split mHadBreak from mLeftBlock

This commit is contained in:
Brian Fiete 2021-06-19 11:00:57 -07:00
parent 5e9ac07804
commit 3806af6c75
2 changed files with 8 additions and 3 deletions

View file

@ -350,10 +350,11 @@ public:
BfDeferredLocalAssignData* mChainedAssignData; BfDeferredLocalAssignData* mChainedAssignData;
bool mHadFallthrough; bool mHadFallthrough;
bool mHadReturn; bool mHadReturn;
bool mHadBreak;
bool mIsUnconditional; bool mIsUnconditional;
bool mIsIfCondition; bool mIsIfCondition;
bool mIfMayBeSkipped; bool mIfMayBeSkipped;
bool mLeftBlock; bool mLeftBlock;
public: public:
BfDeferredLocalAssignData(BfScopeData* scopeData = NULL) BfDeferredLocalAssignData(BfScopeData* scopeData = NULL)
@ -362,6 +363,7 @@ public:
mVarIdBarrier = -1; mVarIdBarrier = -1;
mHadFallthrough = false; mHadFallthrough = false;
mHadReturn = false; mHadReturn = false;
mHadBreak = false;
mChainedAssignData = NULL; mChainedAssignData = NULL;
mIsChained = false; mIsChained = false;
mIsUnconditional = false; mIsUnconditional = false;

View file

@ -3622,7 +3622,7 @@ void BfModule::DoIfStatement(BfIfStatement* ifStmt, bool includeTrueStmt, bool i
} }
prevDLA.Restore(); prevDLA.Restore();
if (mCurMethodState->mDeferredLocalAssignData != NULL) if (mCurMethodState->mDeferredLocalAssignData != NULL)
mCurMethodState->mDeferredLocalAssignData->mLeftBlock = deferredLocalAssignData.mLeftBlock; mCurMethodState->mDeferredLocalAssignData->mHadBreak |= deferredLocalAssignData.mHadBreak;
bool trueHadReturn = mCurMethodState->mHadReturn; bool trueHadReturn = mCurMethodState->mHadReturn;
@ -4675,7 +4675,7 @@ void BfModule::Visit(BfSwitchStatement* switchStmt)
deferredLocalAssignDataVec[blockIdx].mHadReturn = hadReturn; deferredLocalAssignDataVec[blockIdx].mHadReturn = hadReturn;
caseCount++; caseCount++;
if ((!hadReturn) && if ((!hadReturn) &&
((!mCurMethodState->mDeferredLocalAssignData->mHadFallthrough) || (mCurMethodState->mDeferredLocalAssignData->mLeftBlock))) ((!mCurMethodState->mDeferredLocalAssignData->mHadFallthrough) || (mCurMethodState->mDeferredLocalAssignData->mHadBreak)))
allHadReturns = false; allHadReturns = false;
if (auto block = BfNodeDynCast<BfBlock>(switchCase->mCodeBlock)) if (auto block = BfNodeDynCast<BfBlock>(switchCase->mCodeBlock))
@ -5126,7 +5126,10 @@ void BfModule::Visit(BfBreakStatement* breakStmt)
while (checkLocalAssignData != NULL) while (checkLocalAssignData != NULL)
{ {
if ((checkLocalAssignData->mScopeData != NULL) && (checkLocalAssignData->mScopeData->mScopeDepth >= breakData->mScope->mScopeDepth)) if ((checkLocalAssignData->mScopeData != NULL) && (checkLocalAssignData->mScopeData->mScopeDepth >= breakData->mScope->mScopeDepth))
{
checkLocalAssignData->mLeftBlock = true; checkLocalAssignData->mLeftBlock = true;
checkLocalAssignData->mHadBreak = true;
}
checkLocalAssignData = checkLocalAssignData->mChainedAssignData; checkLocalAssignData = checkLocalAssignData->mChainedAssignData;
} }