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