@@ -1630,29 +1630,27 @@ static Type
16301630resolveIdentTypeComponent (TypeResolution resolution,
16311631 GenericParamList *silParams,
16321632 ArrayRef<ComponentIdentTypeRepr *> components) {
1633- auto comp = components.back ();
1634-
16351633 // 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 ());
16411639
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 ());
16431649
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+ }
16511652
1652- // Resolve the nested type.
1653- return resolveNestedIdentTypeComponent (resolution, silParams,
1654- parentTy, parentRange,
1655- comp);
1653+ return result;
16561654}
16571655
16581656// Hack to apply context-specific @escaping to an AST function type.
0 commit comments