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

Fixed infinite emit refresh loop with non-deterministic emits

This commit is contained in:
Brian Fiete 2022-04-17 09:56:52 -07:00
parent f3f2f4c6ec
commit 0de3a62e8b
3 changed files with 14 additions and 1 deletions

View file

@ -482,6 +482,7 @@ BfCompiler::BfCompiler(BfSystem* bfSystem, bool isResolveOnly)
mContext = new BfContext(this);
mCeMachine = new CeMachine(this);
mCurCEExecuteId = -1;
mLastMidCompileRefreshRevision = -1;
}
BfCompiler::~BfCompiler()

View file

@ -326,6 +326,7 @@ public:
BfContext* mContext;
BfCodeGen mCodeGen;
String mOutputDirectory;
int mLastMidCompileRefreshRevision;
bool mCanceling;
bool mHasRequiredTypes;
bool mNeedsFullRefresh;

View file

@ -1197,7 +1197,18 @@ void BfContext::RebuildDependentTypes_MidCompile(BfDependedType* dType, const St
dType->mRebuildFlags = (BfTypeRebuildFlags)(dType->mRebuildFlags | BfTypeRebuildFlag_ChangedMidCompile);
int prevDeletedTypes = mCompiler->mStats.mTypesDeleted;
if (mCompiler->mIsResolveOnly)
mCompiler->mNeedsFullRefresh = true;
{
if (mCompiler->mLastMidCompileRefreshRevision == mCompiler->mRevision - 1)
{
// Don't repeatedly full refresh in the case of non-deterministic emits
}
else
{
mCompiler->mNeedsFullRefresh = true;
mCompiler->mLastMidCompileRefreshRevision = mCompiler->mRevision;
}
}
BfLogSysM("Rebuilding dependent types MidCompile Type:%p Reason:%s\n", dType, reason.c_str());
RebuildDependentTypes(dType);