diff --git a/IDE/src/Compiler/BfCompiler.bf b/IDE/src/Compiler/BfCompiler.bf index 194d4804..efa0547f 100644 --- a/IDE/src/Compiler/BfCompiler.bf +++ b/IDE/src/Compiler/BfCompiler.bf @@ -70,6 +70,9 @@ namespace IDE.Compiler [CallingConvention(.Stdcall), CLink] static extern int32 BfCompiler_GetCompileRevision(void* bfCompiler); + [CallingConvention(.Stdcall), CLink] + static extern int32 BfCompiler_GetCurConstEvalExecuteId(void* bfCompiler); + [CallingConvention(.Stdcall), CLink] static extern void BfCompiler_Delete(void* bfCompiler); @@ -670,6 +673,11 @@ namespace IDE.Compiler return BfCompiler_GetCompileRevision(mNativeBfCompiler); } + public int32 GetCurConstEvalExecuteId() + { + return BfCompiler_GetCurConstEvalExecuteId(mNativeBfCompiler); + } + public void GetTypeDefList(String outStr) { outStr.Append(BfCompiler_GetTypeDefList(mNativeBfCompiler)); diff --git a/IDE/src/ui/StatusBar.bf b/IDE/src/ui/StatusBar.bf index 0ef7ed2e..6a2dd490 100644 --- a/IDE/src/ui/StatusBar.bf +++ b/IDE/src/ui/StatusBar.bf @@ -26,8 +26,8 @@ namespace IDE.ui public int mDirtyDelay; public int mStatusBoxUpdateCnt = -1; - public int32 mResolveStuckTicks; - public float mResolveLastPct = -1; + public int32 mResolveConstEvalStuckTicks; + public float mResolveLastConstEvalExecuteId = -1; public this() { @@ -228,19 +228,19 @@ namespace IDE.ui #endif ) { - float completionPct = gApp.mBfResolveCompiler.GetCompletionPercentage(); - if (completionPct != mResolveLastPct) + int32 executeId = gApp.mBfResolveCompiler.GetCurConstEvalExecuteId(); + if (executeId != mResolveLastConstEvalExecuteId) { - mResolveStuckTicks = 0; - mResolveLastPct = completionPct; + mResolveConstEvalStuckTicks = 0; + mResolveLastConstEvalExecuteId = executeId; } - else - mResolveStuckTicks++; + else if (executeId != -1) + mResolveConstEvalStuckTicks++; MarkDirtyEx(); } else - mResolveStuckTicks = 0; + mResolveConstEvalStuckTicks = 0; } public override void Draw(Graphics g) @@ -394,7 +394,7 @@ namespace IDE.ui { DrawStatusBox("Custom Build Commands...", gApp.mBuildContext.mUpdateCnt); } - else if (mResolveStuckTicks > 300) + else if (mResolveConstEvalStuckTicks > 300) { DrawStatusBox("Const Evaluation"); } diff --git a/IDEHelper/Compiler/BfCompiler.cpp b/IDEHelper/Compiler/BfCompiler.cpp index 364ca044..28a7104d 100644 --- a/IDEHelper/Compiler/BfCompiler.cpp +++ b/IDEHelper/Compiler/BfCompiler.cpp @@ -8711,6 +8711,15 @@ BF_EXPORT int BF_CALLTYPE BfCompiler_GetCompileRevision(BfCompiler* bfCompiler) return bfCompiler->mRevision; } +BF_EXPORT int BF_CALLTYPE BfCompiler_GetCurConstEvalExecuteId(BfCompiler* bfCompiler) +{ + if (bfCompiler->mCEMachine == NULL) + return -1; + if (bfCompiler->mCEMachine->mCurMethodInstance == NULL) + return -1; + return bfCompiler->mCEMachine->mExecuteId; +} + BF_EXPORT void BF_CALLTYPE BfCompiler_Cancel(BfCompiler* bfCompiler) { bfCompiler->Cancel(); diff --git a/IDEHelper/Compiler/BfCompiler.h b/IDEHelper/Compiler/BfCompiler.h index dc9bb418..8f1c1241 100644 --- a/IDEHelper/Compiler/BfCompiler.h +++ b/IDEHelper/Compiler/BfCompiler.h @@ -419,7 +419,7 @@ public: int mCurTypeId; int mTypeInitCount; - String mOutputPath; + String mOutputPath; Array mGenericInstancePurgatory; Array mTypeIdFreeList; @@ -436,7 +436,7 @@ public: BfIRFunction CreateLoadSharedLibraries(BfVDataModule* bfModule, Array& dllMethods); void GetTestMethods(BfVDataModule* bfModule, Array& testMethods, HashContext& vdataHashCtx); void EmitTestMethod(BfVDataModule* bfModule, Array& testMethods, BfIRValue& retValue); - void CreateVData(BfVDataModule* bfModule); + void CreateVData(BfVDataModule* bfModule); void UpdateDependencyMap(bool deleteUnusued, bool& didWork); void ProcessPurgatory(bool reifiedOnly); bool VerifySlotNums();