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:
parent
5e9ac07804
commit
3806af6c75
2 changed files with 8 additions and 3 deletions
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue