diff --git a/IDEHelper/Compiler/BfExprEvaluator.cpp b/IDEHelper/Compiler/BfExprEvaluator.cpp index 7283ad89..94c7dccd 100644 --- a/IDEHelper/Compiler/BfExprEvaluator.cpp +++ b/IDEHelper/Compiler/BfExprEvaluator.cpp @@ -2991,32 +2991,35 @@ void BfMethodMatcher::TryDevirtualizeCall(BfTypedValue target, BfTypedValue* ori while (checkTypeInst != NULL) { mModule->PopulateType(checkTypeInst, BfPopulateType_DataAndMethods); - for (auto&& iface : checkTypeInst->mInterfaces) + if (checkTypeInst->mDefineState >= BfTypeDefineState_DefinedAndMethodsSlotted) { - //TODO: Why did we have this check? This caused Dictionary to not be able to devirtualize - // calls to TKey GetHashCode when TKey was from a user's project... - /*if (!checkTypeInst->IsTypeMemberAccessible(iface.mDeclaringType, activeTypeDef)) - continue;*/ - - if (iface.mInterfaceType == mBestMethodTypeInstance) + for (auto&& iface : checkTypeInst->mInterfaces) { - if (bestIFaceEntry == NULL) - { - bestIFaceEntry = &iface; - continue; - } + //TODO: Why did we have this check? This caused Dictionary to not be able to devirtualize + // calls to TKey GetHashCode when TKey was from a user's project... + /*if (!checkTypeInst->IsTypeMemberAccessible(iface.mDeclaringType, activeTypeDef)) + continue;*/ - bool isBetter; - bool isWorse; - mModule->CompareDeclTypes(NULL, iface.mDeclaringType, bestIFaceEntry->mDeclaringType, isBetter, isWorse); - if (isBetter == isWorse) + if (iface.mInterfaceType == mBestMethodTypeInstance) { - // Failed - } - else - { - if (isBetter) + if (bestIFaceEntry == NULL) + { bestIFaceEntry = &iface; + continue; + } + + bool isBetter; + bool isWorse; + mModule->CompareDeclTypes(NULL, iface.mDeclaringType, bestIFaceEntry->mDeclaringType, isBetter, isWorse); + if (isBetter == isWorse) + { + // Failed + } + else + { + if (isBetter) + bestIFaceEntry = &iface; + } } } } diff --git a/IDEHelper/Compiler/BfModule.cpp b/IDEHelper/Compiler/BfModule.cpp index a1b22f6a..42410b0a 100644 --- a/IDEHelper/Compiler/BfModule.cpp +++ b/IDEHelper/Compiler/BfModule.cpp @@ -3597,7 +3597,8 @@ void BfModule::AddDependency(BfType* usedType, BfType* userType, BfDependencyMap if (usedType->IsSpecializedByAutoCompleteMethod()) { - if ((flags & (BfDependencyMap::DependencyFlag_TypeGenericArg | BfDependencyMap::DependencyFlag_OuterType | BfDependencyMap::DependencyFlag_DerivedFrom)) == 0) + if ((flags & (BfDependencyMap::DependencyFlag_TypeGenericArg | BfDependencyMap::DependencyFlag_MethodGenericArg | + BfDependencyMap::DependencyFlag_OuterType | BfDependencyMap::DependencyFlag_DerivedFrom)) == 0) return; }