@@ -2745,24 +2745,21 @@ resolveTypeDeclsToNominal(Evaluator &evaluator,
27452745
27462746 // Recognize Swift.AnyObject directly.
27472747 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-
27602748 // Type version: an empty class-bound existential.
27612749 if (typealias->hasInterfaceType ()) {
27622750 if (auto type = typealias->getUnderlyingType ())
27632751 if (type->isAnyObject ())
27642752 anyObject = true ;
27652753 }
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+ }
27662763 }
27672764
27682765 continue ;
@@ -2922,50 +2919,25 @@ static DirectlyReferencedTypeDecls
29222919directReferencesForDeclRefTypeRepr (Evaluator &evaluator, ASTContext &ctx,
29232920 DeclRefTypeRepr *repr, DeclContext *dc,
29242921 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};
29412925 }
29422926
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);
29572930
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);
29662935 }
29672936
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);
29692941}
29702942
29712943static DirectlyReferencedTypeDecls
@@ -3654,11 +3626,12 @@ CustomAttrNominalRequest::evaluate(Evaluator &evaluator,
36543626 assocType->getDescriptiveKind (),
36553627 assocType->getName ());
36563628
3657- auto *baseComp = new (ctx) SimpleIdentTypeRepr (
3629+ auto *baseTR = new (ctx) SimpleIdentTypeRepr (
36583630 identTypeRepr->getNameLoc (), DeclNameRef (moduleName));
36593631
36603632 auto *newTE = new (ctx) TypeExpr (
3661- MemberTypeRepr::create (ctx, baseComp, {identTypeRepr}));
3633+ MemberTypeRepr::create (ctx, baseTR, identTypeRepr->getNameLoc (),
3634+ identTypeRepr->getNameRef ()));
36623635 attr->resetTypeInformation (newTE);
36633636 return nominal;
36643637 }
0 commit comments