Skip to content

Commit 7d2b201

Browse files
committed
Sema: resolveIdentTypeComponent() can use a for loop instead of recursion
1 parent ca5e721 commit 7d2b201

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
@@ -1630,29 +1630,27 @@ static Type
16301630
resolveIdentTypeComponent(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

Comments
 (0)