diff --git a/IDE/src/ui/SourceViewPanel.bf b/IDE/src/ui/SourceViewPanel.bf index c6c88cdc..66266a98 100644 --- a/IDE/src/ui/SourceViewPanel.bf +++ b/IDE/src/ui/SourceViewPanel.bf @@ -1448,6 +1448,7 @@ namespace IDE.ui public void DoRefreshCollapse(BfParser parser, int32 textVersion, IdSpan charIdSpan) { var bfCompiler = BfResolveCompiler; + var bfSystem = BfResolveSystem; String explicitEmitTypeNames = scope .(); for (var explicitType in mExplicitEmitTypes) @@ -1459,6 +1460,7 @@ namespace IDE.ui var resolvePassData = parser.CreateResolvePassData(.None); defer delete resolvePassData; + bfSystem.Lock(0); var collapseData = bfCompiler.GetCollapseRegions(parser, resolvePassData, explicitEmitTypeNames, .. scope .()); using (mMonitor.Enter()) { @@ -1468,6 +1470,7 @@ namespace IDE.ui mQueuedCollapseData.mTextVersion = textVersion; mQueuedCollapseData.mCharIdSpan = charIdSpan; } + bfSystem.Unlock(); } public void DoFullClassify(ResolveParams resolveParams) diff --git a/IDEHelper/Compiler/BfCompiler.cpp b/IDEHelper/Compiler/BfCompiler.cpp index 8b7b33f2..add65531 100644 --- a/IDEHelper/Compiler/BfCompiler.cpp +++ b/IDEHelper/Compiler/BfCompiler.cpp @@ -9440,6 +9440,8 @@ BF_EXPORT bool BF_CALLTYPE BfCompiler_ClassifySource(BfCompiler* bfCompiler, BfP { BP_ZONE("BfCompiler_ClassifySource"); + bfCompiler->mSystem->AssertWeHaveLock(); + String& autoCompleteResultString = *gTLStrReturn.Get(); autoCompleteResultString.clear(); @@ -9464,6 +9466,8 @@ BF_EXPORT bool BF_CALLTYPE BfCompiler_ClassifySource(BfCompiler* bfCompiler, BfP BF_EXPORT const char* BF_CALLTYPE BfCompiler_GetCollapseRegions(BfCompiler* bfCompiler, BfParser* bfParser, BfResolvePassData* resolvePassData, char* explicitEmitTypeNames) { + bfCompiler->mSystem->AssertWeHaveLock(); + String& outString = *gTLStrReturn.Get(); outString.Clear(); @@ -10029,6 +10033,8 @@ BF_EXPORT const char* BF_CALLTYPE BfCompiler_GetCollapseRegions(BfCompiler* bfCo BF_EXPORT bool BF_CALLTYPE BfCompiler_VerifyTypeName(BfCompiler* bfCompiler, char* name, int cursorPos) { + bfCompiler->mSystem->AssertWeHaveLock(); + String typeName = name; auto system = bfCompiler->mSystem; @@ -10096,7 +10102,7 @@ BF_EXPORT bool BF_CALLTYPE BfCompiler_VerifyTypeName(BfCompiler* bfCompiler, cha resolvePassData.mAutoComplete->mModule = bfCompiler->mContext->mScratchModule; } resolvePassData.mParsers.Add(&parser); - + SetAndRestoreValue prevCompilerResolvePassData(bfCompiler->mResolvePassData, &resolvePassData); SetAndRestoreValue prevPassInstance(bfCompiler->mPassInstance, &passInstance); @@ -10248,6 +10254,8 @@ BF_EXPORT int BF_CALLTYPE BfCompiler_GetTypeId(BfCompiler* bfCompiler, const cha BF_EXPORT const char* BF_CALLTYPE BfCompiler_GetTypeInfo(BfCompiler* bfCompiler, const char* name) { + bfCompiler->mSystem->AssertWeHaveLock(); + String& outString = *gTLStrReturn.Get(); outString = ""; @@ -10564,6 +10572,8 @@ BF_EXPORT void BF_CALLTYPE BfCompiler_FileChanged(BfCompiler* bfCompiler, const BF_EXPORT const char* BF_CALLTYPE BfCompiler_GetSymbolReferences(BfCompiler* bfCompiler, BfPassInstance* bfPassInstance, BfResolvePassData* resolvePassData) { + bfCompiler->mSystem->AssertWeHaveLock(); + BP_ZONE("BfCompiler_GetSymbolReferences"); String& outString = *gTLStrReturn.Get(); diff --git a/IDEHelper/Compiler/BfSystem.cpp b/IDEHelper/Compiler/BfSystem.cpp index 4fb59ae9..b5bb427f 100644 --- a/IDEHelper/Compiler/BfSystem.cpp +++ b/IDEHelper/Compiler/BfSystem.cpp @@ -3754,7 +3754,9 @@ void BfSystem::Unlock() void BfSystem::AssertWeHaveLock() { - //mSystemLock.mCritSect +#ifdef BF_PLATFORM_WINDOWS + BF_ASSERT_REL(((CRITICAL_SECTION*)mSystemLock.mCritSect)->OwningThread == (HANDLE)(uintptr)::GetCurrentThreadId()); +#endif } void BfSystem::RemoveDeletedParsers()