From 0de3a62e8b3dfa2f3eb8ce41e5971690fd2f89d4 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Sun, 17 Apr 2022 09:56:52 -0700 Subject: [PATCH] Fixed infinite emit refresh loop with non-deterministic emits --- IDEHelper/Compiler/BfCompiler.cpp | 1 + IDEHelper/Compiler/BfCompiler.h | 1 + IDEHelper/Compiler/BfContext.cpp | 13 ++++++++++++- 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/IDEHelper/Compiler/BfCompiler.cpp b/IDEHelper/Compiler/BfCompiler.cpp index 213c023f..ef909ef1 100644 --- a/IDEHelper/Compiler/BfCompiler.cpp +++ b/IDEHelper/Compiler/BfCompiler.cpp @@ -482,6 +482,7 @@ BfCompiler::BfCompiler(BfSystem* bfSystem, bool isResolveOnly) mContext = new BfContext(this); mCeMachine = new CeMachine(this); mCurCEExecuteId = -1; + mLastMidCompileRefreshRevision = -1; } BfCompiler::~BfCompiler() diff --git a/IDEHelper/Compiler/BfCompiler.h b/IDEHelper/Compiler/BfCompiler.h index 4c6e556e..14f7209a 100644 --- a/IDEHelper/Compiler/BfCompiler.h +++ b/IDEHelper/Compiler/BfCompiler.h @@ -326,6 +326,7 @@ public: BfContext* mContext; BfCodeGen mCodeGen; String mOutputDirectory; + int mLastMidCompileRefreshRevision; bool mCanceling; bool mHasRequiredTypes; bool mNeedsFullRefresh; diff --git a/IDEHelper/Compiler/BfContext.cpp b/IDEHelper/Compiler/BfContext.cpp index 2554020b..07717c5a 100644 --- a/IDEHelper/Compiler/BfContext.cpp +++ b/IDEHelper/Compiler/BfContext.cpp @@ -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);