Skip to content

Commit dde2d4f

Browse files
committed
Sema: resolveIdentTypeComponent() can use a for loop instead of recursion
1 parent c6778c8 commit dde2d4f

File tree

1 file changed

+17
-19
lines changed

1 file changed

+17
-19
lines changed

lib/Sema/TypeCheckType.cpp

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1626,29 +1626,27 @@ static Type
16261626
resolveIdentTypeComponent(TypeResolution resolution,
16271627
GenericParamList *silParams,
16281628
ArrayRef<ComponentIdentTypeRepr *> components) {
1629-
auto comp = components.back();
1630-
16311629
// 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());
16371635

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());
16391645

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+
}
16471648

1648-
// Resolve the nested type.
1649-
return resolveNestedIdentTypeComponent(resolution, silParams,
1650-
parentTy, parentRange,
1651-
comp);
1649+
return result;
16521650
}
16531651

16541652
// Hack to apply context-specific @escaping to an AST function type.

0 commit comments

Comments
 (0)