From c8055f0a38ee8af018334023db6afbc4904d85c4 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Fri, 29 May 2020 10:11:09 -0700 Subject: [PATCH] Fixed dependency adding of interfaces --- IDEHelper/Compiler/BfContext.cpp | 13 ++----------- IDEHelper/Compiler/BfDefBuilder.cpp | 20 ++------------------ IDEHelper/Compiler/BfModuleTypeUtils.cpp | 9 +++++---- 3 files changed, 9 insertions(+), 33 deletions(-) diff --git a/IDEHelper/Compiler/BfContext.cpp b/IDEHelper/Compiler/BfContext.cpp index 68f3fdf3..7ab7f53d 100644 --- a/IDEHelper/Compiler/BfContext.cpp +++ b/IDEHelper/Compiler/BfContext.cpp @@ -1428,12 +1428,6 @@ void BfContext::DeleteType(BfType* type, bool deferDepRebuilds) BfTypeInstance* typeInst = type->ToTypeInstance(); if (typeInst != NULL) { -// if (typeInst->mTypeDef->IsGlobalsContainer()) -// { -// bool worked = mSystem->mGlobalsMap.Remove(typeInst->mTypeDef->mNamespace); -// BF_ASSERT(worked); -// } - if (mCompiler->mHotState != NULL) { if ((typeInst->mHotTypeData != NULL) && (typeInst->mHotTypeData->mPendingDataChange)) @@ -1540,11 +1534,6 @@ void BfContext::DeleteType(BfType* type, bool deferDepRebuilds) mFailTypes.Add(dependentTypeInst); else { -// BfTypeProcessRequest* typeProcessRequest = mPopulateTypeWorkList.Alloc(); -// typeProcessRequest->mType = dependentType; -// typeProcessRequest->mRebuildType = true; -// mCompiler->mStats.mTypesQueued++; -// mCompiler->UpdateCompletion(); rebuildTypeQueue.Add(dependentType); } } @@ -2109,7 +2098,9 @@ void BfContext::VerifyTypeLookups(BfTypeInstance* typeInst) BfTypeDef* ambiguousTypeDef = NULL; BfTypeDef* result = mSystem->FindTypeDef(lookupEntry.mName, lookupEntry.mNumGenericParams, useTypeDef->mProject, useTypeDef->mNamespaceSearch, &ambiguousTypeDef); if (result != lookupEntryPair.mValue.mTypeDef) + { isDirty = true; + } else lookupEntry.mAtomUpdateIdx = atomUpdateIdx; } diff --git a/IDEHelper/Compiler/BfDefBuilder.cpp b/IDEHelper/Compiler/BfDefBuilder.cpp index e7c7cc9f..fcb542ce 100644 --- a/IDEHelper/Compiler/BfDefBuilder.cpp +++ b/IDEHelper/Compiler/BfDefBuilder.cpp @@ -89,11 +89,7 @@ void BfDefBuilder::Process(BfPassInstance* passInstance, BfSource* bfSource, boo mSystem->mNeedsTypesHandledByCompiler = true; mPassInstance = passInstance; - /*if (parser->mCursorIdx == -1) - { - //gDefBuilderPerfManager.StartRecording(); - }*/ - + bool isAutocomplete = false; if ((mResolvePassData != NULL) && (mResolvePassData->mAutoComplete != NULL)) { @@ -106,12 +102,6 @@ void BfDefBuilder::Process(BfPassInstance* passInstance, BfSource* bfSource, boo mFullRefresh = fullRefresh; -// for (auto typeDef : mSystem->mTypeDefs) -// { -// if ((!typeDef->mIsCombinedPartial) && (typeDef->GetLastSource() == bfSource->mPrevRevision)) -// typeDef->mDefState = BfTypeDef::DefState_AwaitingNewVersion; -// } - if (bfSource->mPrevRevision != NULL) { for (auto typeDef : bfSource->mPrevRevision->mTypeDefs) @@ -216,8 +206,7 @@ void BfDefBuilder::ParseGenericParams(BfGenericParamsDeclaration* genericParamsD checkTypeDef = checkTypeDef->mOuterType; } - auto genericParamDef = new BfGenericParamDef(); - //genericParamDef->mOwner = mCurActualTypeDef; + auto genericParamDef = new BfGenericParamDef(); genericParamDef->mName = name; genericParamDef->mNameNodes.Add(genericParamNode); genericParamDef->mGenericParamFlags = BfGenericParamFlag_None; @@ -1508,11 +1497,6 @@ void BfDefBuilder::Visit(BfTypeDeclaration* typeDeclaration) { BfTypeDef* prevDef = NULL; -// auto checkTypeDef = mSystem->mTypeDefs.Find(fullName); -// while (checkTypeDef != NULL) - - - auto itr = mSystem->mTypeDefs.TryGet(fullName); while (itr) { diff --git a/IDEHelper/Compiler/BfModuleTypeUtils.cpp b/IDEHelper/Compiler/BfModuleTypeUtils.cpp index 2b7f4dde..98b9e173 100644 --- a/IDEHelper/Compiler/BfModuleTypeUtils.cpp +++ b/IDEHelper/Compiler/BfModuleTypeUtils.cpp @@ -2176,6 +2176,8 @@ bool BfModule::DoPopulateType(BfType* resolvedTypeRef, BfPopulateType populateTy typeInterfaceInst.mStartVirtualIdx = -1; typeInterfaceInst.mIsRedeclared = false; typeInstance->mInterfaces.push_back(typeInterfaceInst); + + AddDependency(checkInterface, typeInstance, BfDependencyMap::DependencyFlag_ImplementsInterface); // Interfaces can list other interfaces in their declaration, so pull those in too for (auto depIFace : checkInterface->mInterfaces) @@ -3501,10 +3503,9 @@ void BfModule::DoTypeInstanceMethodProcessing(BfTypeInstance* typeInstance) auto checkTypeInstance = typeInstance; while (checkTypeInstance != NULL) { - for (auto&& interfaceEntry : checkTypeInstance->mInterfaces) - { - AddDependency(interfaceEntry.mInterfaceType, typeInstance, BfDependencyMap::DependencyFlag_ImplementsInterface); - } + // These may have been already added + for (auto&& interfaceEntry : checkTypeInstance->mInterfaces) + AddDependency(interfaceEntry.mInterfaceType, typeInstance, BfDependencyMap::DependencyFlag_ImplementsInterface); checkTypeInstance = checkTypeInstance->GetImplBaseType(); }