Просмотр исходного кода

Fixed inifnite work loop populating IsSpecializedByAutoCompleteMethod

Brian Fiete 4 лет назад
Родитель
Сommit
c0dd9b0e09
2 измененных файлов с 13 добавлено и 12 удалено
  1. 12 11
      IDEHelper/Compiler/BfContext.cpp
  2. 1 1
      IDEHelper/Compiler/BfModule.cpp

+ 12 - 11
IDEHelper/Compiler/BfContext.cpp

@@ -695,17 +695,18 @@ bool BfContext::ProcessWorkList(bool onlyReifiedTypes, bool onlyReifiedMethods)
 						//  but it has been referenced now so we need to complete it, OR
 						//  if this is from a newly-reified module
 
-// 						if (false)
-// 						{
-// 							// For debugging
-// 							mScratchModule->PopulateType(type, BfPopulateType_Full);
-// 						}
-
-						BfTypeProcessRequest* typeProcessRequest = mPopulateTypeWorkList.Alloc();
-						typeProcessRequest->mType = type;						
-						mCompiler->mStats.mTypesQueued++;
-						mCompiler->UpdateCompletion();
-						didWork = true;
+						if ((type->IsSpecializedByAutoCompleteMethod()) && (type->mDefineState >= BfTypeDefineState_Defined))
+						{
+							// We don't process methods for these
+						}
+						else
+						{
+							BfTypeProcessRequest* typeProcessRequest = mPopulateTypeWorkList.Alloc();
+							typeProcessRequest->mType = type;
+							mCompiler->mStats.mTypesQueued++;
+							mCompiler->UpdateCompletion();
+							didWork = true;
+						}
 					}
 				}
 			}

+ 1 - 1
IDEHelper/Compiler/BfModule.cpp

@@ -23683,7 +23683,7 @@ bool BfModule::Finish()
 	{
 		for (auto type : mOwnedTypeInstances)
 		{
-			BF_ASSERT(!type->IsIncomplete());
+			BF_ASSERT((!type->IsIncomplete()) || (type->IsSpecializedByAutoCompleteMethod()));
 		}
 	}