@@ -2745,24 +2745,21 @@ resolveTypeDeclsToNominal(Evaluator &evaluator,
2745
2745
2746
2746
// Recognize Swift.AnyObject directly.
2747
2747
if (typealias->getName ().is (" AnyObject" )) {
2748
- // TypeRepr version: Builtin.AnyObject
2749
- if (auto typeRepr = typealias->getUnderlyingTypeRepr ()) {
2750
- if (auto memberTR = dyn_cast<MemberTypeRepr>(typeRepr)) {
2751
- auto memberComps = memberTR->getMemberComponents ();
2752
- if (memberComps.size () == 1 &&
2753
- memberComps.front ()->getNameRef ().isSimpleName (" AnyObject" ) &&
2754
- memberTR->getRoot ()->isSimpleUnqualifiedIdentifier (" Builtin" )) {
2755
- anyObject = true ;
2756
- }
2757
- }
2758
- }
2759
-
2760
2748
// Type version: an empty class-bound existential.
2761
2749
if (typealias->hasInterfaceType ()) {
2762
2750
if (auto type = typealias->getUnderlyingType ())
2763
2751
if (type->isAnyObject ())
2764
2752
anyObject = true ;
2765
2753
}
2754
+ // TypeRepr version: Builtin.AnyObject
2755
+ else if (auto *memberTR = dyn_cast_or_null<MemberTypeRepr>(
2756
+ typealias->getUnderlyingTypeRepr ())) {
2757
+ if (!memberTR->hasGenericArgList () &&
2758
+ memberTR->getNameRef ().isSimpleName (" AnyObject" ) &&
2759
+ memberTR->getBase ()->isSimpleUnqualifiedIdentifier (" Builtin" )) {
2760
+ anyObject = true ;
2761
+ }
2762
+ }
2766
2763
}
2767
2764
2768
2765
continue ;
@@ -2922,50 +2919,25 @@ static DirectlyReferencedTypeDecls
2922
2919
directReferencesForDeclRefTypeRepr (Evaluator &evaluator, ASTContext &ctx,
2923
2920
DeclRefTypeRepr *repr, DeclContext *dc,
2924
2921
bool allowUsableFromInline) {
2925
- DirectlyReferencedTypeDecls current;
2926
-
2927
- auto *rootComp = repr->getRoot ();
2928
- if (auto *identBase = dyn_cast<IdentTypeRepr>(rootComp)) {
2929
- // If we already set a declaration, use it.
2930
- if (auto *typeDecl = identBase->getBoundDecl ()) {
2931
- current = {1 , typeDecl};
2932
- } else {
2933
- // For the base component, perform unqualified name lookup.
2934
- current = directReferencesForUnqualifiedTypeLookup (
2935
- identBase->getNameRef (), identBase->getLoc (), dc,
2936
- LookupOuterResults::Excluded, allowUsableFromInline);
2937
- }
2938
- } else {
2939
- current = directReferencesForTypeRepr (evaluator, ctx, rootComp, dc,
2940
- allowUsableFromInline);
2922
+ // If we already set a declaration, use it.
2923
+ if (auto *typeDecl = repr->getBoundDecl ()) {
2924
+ return {typeDecl};
2941
2925
}
2942
2926
2943
- auto *memberTR = dyn_cast<MemberTypeRepr>(repr);
2944
- if (!memberTR)
2945
- return current;
2946
-
2947
- // If we didn't find anything, fail now.
2948
- if (current.empty ())
2949
- return current;
2950
-
2951
- for (const auto &component : memberTR->getMemberComponents ()) {
2952
- // If we already set a declaration, use it.
2953
- if (auto typeDecl = component->getBoundDecl ()) {
2954
- current = {1 , typeDecl};
2955
- continue ;
2956
- }
2927
+ if (auto *memberTR = dyn_cast<MemberTypeRepr>(repr)) {
2928
+ DirectlyReferencedTypeDecls baseTypeDecls = directReferencesForTypeRepr (
2929
+ evaluator, ctx, memberTR->getBase (), dc, allowUsableFromInline);
2957
2930
2958
- // For subsequent components, perform qualified name lookup.
2959
- current =
2960
- directReferencesForQualifiedTypeLookup (evaluator, ctx, current,
2961
- component->getNameRef (), dc,
2962
- component->getLoc (),
2963
- allowUsableFromInline);
2964
- if (current.empty ())
2965
- return current;
2931
+ // For a qualified identifier, perform qualified name lookup.
2932
+ return directReferencesForQualifiedTypeLookup (
2933
+ evaluator, ctx, baseTypeDecls, repr->getNameRef (), dc, repr->getLoc (),
2934
+ allowUsableFromInline);
2966
2935
}
2967
2936
2968
- return current;
2937
+ // For an unqualified identifier, perform unqualified name lookup.
2938
+ return directReferencesForUnqualifiedTypeLookup (
2939
+ repr->getNameRef (), repr->getLoc (), dc, LookupOuterResults::Excluded,
2940
+ allowUsableFromInline);
2969
2941
}
2970
2942
2971
2943
static DirectlyReferencedTypeDecls
@@ -3654,11 +3626,12 @@ CustomAttrNominalRequest::evaluate(Evaluator &evaluator,
3654
3626
assocType->getDescriptiveKind (),
3655
3627
assocType->getName ());
3656
3628
3657
- auto *baseComp = new (ctx) SimpleIdentTypeRepr (
3629
+ auto *baseTR = new (ctx) SimpleIdentTypeRepr (
3658
3630
identTypeRepr->getNameLoc (), DeclNameRef (moduleName));
3659
3631
3660
3632
auto *newTE = new (ctx) TypeExpr (
3661
- MemberTypeRepr::create (ctx, baseComp, {identTypeRepr}));
3633
+ MemberTypeRepr::create (ctx, baseTR, identTypeRepr->getNameLoc (),
3634
+ identTypeRepr->getNameRef ()));
3662
3635
attr->resetTypeInformation (newTE);
3663
3636
return nominal;
3664
3637
}
0 commit comments