@@ -1630,29 +1630,27 @@ static Type
1630
1630
resolveIdentTypeComponent (TypeResolution resolution,
1631
1631
GenericParamList *silParams,
1632
1632
ArrayRef<ComponentIdentTypeRepr *> components) {
1633
- auto comp = components.back ();
1634
-
1635
1633
// The first component uses unqualified lookup.
1636
- const auto parentComps = components.drop_back ();
1637
- if (parentComps. empty ()) {
1638
- return resolveTopLevelIdentTypeComponent (resolution, silParams,
1639
- comp);
1640
- }
1634
+ auto topLevelComp = components.front ();
1635
+ auto result = resolveTopLevelIdentTypeComponent (resolution, silParams,
1636
+ topLevelComp);
1637
+ if (result-> hasError ())
1638
+ return ErrorType::get (result-> getASTContext ());
1641
1639
1642
- // All remaining components use qualified lookup.
1640
+ // Remaining components are resolved via iterated qualified lookups.
1641
+ SourceRange parentRange (topLevelComp->getStartLoc (),
1642
+ topLevelComp->getEndLoc ());
1643
+ for (auto nestedComp : components.drop_front ()) {
1644
+ result = resolveNestedIdentTypeComponent (resolution, silParams,
1645
+ result, parentRange,
1646
+ nestedComp);
1647
+ if (result->hasError ())
1648
+ return ErrorType::get (result->getASTContext ());
1643
1649
1644
- // Resolve the parent type.
1645
- Type parentTy = resolveIdentTypeComponent (resolution, silParams,
1646
- parentComps);
1647
- if (!parentTy || parentTy->hasError ()) return parentTy;
1648
-
1649
- SourceRange parentRange (parentComps.front ()->getStartLoc (),
1650
- parentComps.back ()->getEndLoc ());
1650
+ parentRange.End = nestedComp->getEndLoc ();
1651
+ }
1651
1652
1652
- // Resolve the nested type.
1653
- return resolveNestedIdentTypeComponent (resolution, silParams,
1654
- parentTy, parentRange,
1655
- comp);
1653
+ return result;
1656
1654
}
1657
1655
1658
1656
// Hack to apply context-specific @escaping to an AST function type.
0 commit comments