Skip to content

Commit d6fd424

Browse files
committed
[NFC] MemberTypeRepr: getBaseComponent()getRoot()
1 parent 8bb6846 commit d6fd424

13 files changed

+58
-55
lines changed

include/swift/AST/TypeRepr.h

Lines changed: 15 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -330,9 +330,13 @@ class DeclRefTypeRepr : public TypeRepr {
330330
explicit DeclRefTypeRepr(TypeReprKind K) : TypeRepr(K) {}
331331

332332
public:
333-
/// Returns \c this if it is a \c IdentTypeRepr. Otherwise, \c this
334-
/// is a \c MemberTypeRepr, and the method returns its base component.
335-
TypeRepr *getBaseComponent();
333+
/// Returns the root qualifier. For example, `A` for `A.B.C`. The root
334+
/// qualifier of a `IdentTypeRepr` is itself.
335+
TypeRepr *getRoot();
336+
337+
/// Returns the root qualifier. For example, `A` for `A.B.C`. The root
338+
/// qualifier of a `IdentTypeRepr` is itself.
339+
const TypeRepr *getRoot() const;
336340

337341
/// Returns \c this if it is a \c IdentTypeRepr. Otherwise, \c this
338342
/// is a \c MemberTypeRepr, and the method returns its last member component.
@@ -498,11 +502,11 @@ class MemberTypeRepr final : public DeclRefTypeRepr,
498502
private llvm::TrailingObjects<MemberTypeRepr, IdentTypeRepr *> {
499503
friend TrailingObjects;
500504

501-
/// The base component, which is not necessarily an identifier type.
502-
TypeRepr *Base;
505+
/// The root component, which is not necessarily an identifier type.
506+
TypeRepr *Root;
503507

504-
MemberTypeRepr(TypeRepr *Base, ArrayRef<IdentTypeRepr *> MemberComponents)
505-
: DeclRefTypeRepr(TypeReprKind::Member), Base(Base) {
508+
MemberTypeRepr(TypeRepr *Root, ArrayRef<IdentTypeRepr *> MemberComponents)
509+
: DeclRefTypeRepr(TypeReprKind::Member), Root(Root) {
506510
Bits.MemberTypeRepr.NumMemberComponents = MemberComponents.size();
507511
assert(MemberComponents.size() > 0 &&
508512
"MemberTypeRepr requires at least 1 member component");
@@ -511,13 +515,14 @@ class MemberTypeRepr final : public DeclRefTypeRepr,
511515
}
512516

513517
public:
514-
static TypeRepr *create(const ASTContext &Ctx, TypeRepr *Base,
518+
static TypeRepr *create(const ASTContext &Ctx, TypeRepr *Root,
515519
ArrayRef<IdentTypeRepr *> MemberComponents);
516520

517521
static DeclRefTypeRepr *create(const ASTContext &Ctx,
518522
ArrayRef<IdentTypeRepr *> Components);
519523

520-
TypeRepr *getBaseComponent() const { return Base; }
524+
/// Returns the root qualifier. For example, `A` for `A.B.C`.
525+
TypeRepr *getRoot() const { return Root; }
521526

522527
ArrayRef<IdentTypeRepr *> getMemberComponents() const {
523528
return {getTrailingObjects<IdentTypeRepr *>(),
@@ -534,9 +539,7 @@ class MemberTypeRepr final : public DeclRefTypeRepr,
534539
static bool classof(const MemberTypeRepr *T) { return true; }
535540

536541
private:
537-
SourceLoc getStartLocImpl() const {
538-
return getBaseComponent()->getStartLoc();
539-
}
542+
SourceLoc getStartLocImpl() const { return getRoot()->getStartLoc(); }
540543
SourceLoc getEndLocImpl() const { return getLastComponent()->getEndLoc(); }
541544
SourceLoc getLocImpl() const { return getLastComponent()->getLoc(); }
542545

lib/AST/ASTDumper.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3315,7 +3315,7 @@ class PrintTypeRepr : public TypeReprVisitor<PrintTypeRepr, void, StringRef>,
33153315
void visitMemberTypeRepr(MemberTypeRepr *T, StringRef label) {
33163316
printCommon("type_member", label);
33173317

3318-
printRec(T->getBaseComponent());
3318+
printRec(T->getRoot());
33193319
for (auto *comp : T->getMemberComponents()) {
33203320
printRec(comp);
33213321
}

lib/AST/ASTWalker.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2143,7 +2143,7 @@ bool Traversal::visitGenericIdentTypeRepr(GenericIdentTypeRepr *T) {
21432143
}
21442144

21452145
bool Traversal::visitMemberTypeRepr(MemberTypeRepr *T) {
2146-
if (doIt(T->getBaseComponent()))
2146+
if (doIt(T->getRoot()))
21472147
return true;
21482148

21492149
for (auto comp : T->getMemberComponents()) {

lib/AST/Attr.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2744,7 +2744,7 @@ std::pair<IdentTypeRepr *, IdentTypeRepr *> CustomAttr::destructureMacroRef() {
27442744
if (auto *identType = dyn_cast<IdentTypeRepr>(typeRepr))
27452745
return {nullptr, identType};
27462746
if (auto *memType = dyn_cast<MemberTypeRepr>(typeRepr))
2747-
if (auto *base = dyn_cast<IdentTypeRepr>(memType->getBaseComponent()))
2747+
if (auto *base = dyn_cast<IdentTypeRepr>(memType->getRoot()))
27482748
if (memType->getMemberComponents().size() == 1)
27492749
if (auto first =
27502750
dyn_cast<IdentTypeRepr>(memType->getMemberComponents().front()))

lib/AST/Expr.cpp

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2268,7 +2268,7 @@ TypeExpr *TypeExpr::createForMemberDecl(TypeRepr *ParentTR, DeclNameLoc NameLoc,
22682268
}
22692269

22702270
Components.push_back(NewComp);
2271-
TR = MemberTypeRepr::create(C, DeclRefTR->getBaseComponent(), Components);
2271+
TR = MemberTypeRepr::create(C, DeclRefTR->getRoot(), Components);
22722272
} else {
22732273
TR = MemberTypeRepr::create(C, ParentTR, NewComp);
22742274
}
@@ -2314,9 +2314,8 @@ TypeExpr *TypeExpr::createForSpecializedDecl(DeclRefTypeRepr *ParentTR,
23142314
return nullptr;
23152315
}
23162316

2317-
if (auto *identBase =
2318-
dyn_cast<IdentTypeRepr>(memberTR->getBaseComponent())) {
2319-
if (isUnboundGenericComponent(identBase))
2317+
if (auto *identRoot = dyn_cast<IdentTypeRepr>(memberTR->getRoot())) {
2318+
if (isUnboundGenericComponent(identRoot))
23202319
return nullptr;
23212320
}
23222321
}
@@ -2336,8 +2335,7 @@ TypeExpr *TypeExpr::createForSpecializedDecl(DeclRefTypeRepr *ParentTR,
23362335
newMemberComps.append(oldMemberComps.begin(), oldMemberComps.end());
23372336
newMemberComps.push_back(genericComp);
23382337

2339-
TR =
2340-
MemberTypeRepr::create(C, memberTR->getBaseComponent(), newMemberComps);
2338+
TR = MemberTypeRepr::create(C, memberTR->getRoot(), newMemberComps);
23412339
} else {
23422340
TR = genericComp;
23432341
}

lib/AST/NameLookup.cpp

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2750,11 +2750,10 @@ resolveTypeDeclsToNominal(Evaluator &evaluator,
27502750
// TypeRepr version: Builtin.AnyObject
27512751
if (auto typeRepr = typealias->getUnderlyingTypeRepr()) {
27522752
if (auto memberTR = dyn_cast<MemberTypeRepr>(typeRepr)) {
2753-
if (auto identBase =
2754-
dyn_cast<IdentTypeRepr>(memberTR->getBaseComponent())) {
2753+
if (auto identRoot = dyn_cast<IdentTypeRepr>(memberTR->getRoot())) {
27552754
auto memberComps = memberTR->getMemberComponents();
27562755
if (memberComps.size() == 1 &&
2757-
identBase->getNameRef().isSimpleName("Builtin") &&
2756+
identRoot->getNameRef().isSimpleName("Builtin") &&
27582757
memberComps.front()->getNameRef().isSimpleName("AnyObject")) {
27592758
anyObject = true;
27602759
}
@@ -2929,8 +2928,8 @@ directReferencesForDeclRefTypeRepr(Evaluator &evaluator, ASTContext &ctx,
29292928
bool allowUsableFromInline) {
29302929
DirectlyReferencedTypeDecls current;
29312930

2932-
auto *baseComp = repr->getBaseComponent();
2933-
if (auto *identBase = dyn_cast<IdentTypeRepr>(baseComp)) {
2931+
auto *rootComp = repr->getRoot();
2932+
if (auto *identBase = dyn_cast<IdentTypeRepr>(rootComp)) {
29342933
// If we already set a declaration, use it.
29352934
if (auto *typeDecl = identBase->getBoundDecl()) {
29362935
current = {1, typeDecl};
@@ -2941,7 +2940,7 @@ directReferencesForDeclRefTypeRepr(Evaluator &evaluator, ASTContext &ctx,
29412940
LookupOuterResults::Excluded, allowUsableFromInline);
29422941
}
29432942
} else {
2944-
current = directReferencesForTypeRepr(evaluator, ctx, baseComp, dc,
2943+
current = directReferencesForTypeRepr(evaluator, ctx, rootComp, dc,
29452944
allowUsableFromInline);
29462945
}
29472946

lib/AST/TypeRepr.cpp

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,18 @@ SourceLoc TypeRepr::findAttrLoc(TypeAttrKind kind) const {
134134
return SourceLoc();
135135
}
136136

137+
TypeRepr *DeclRefTypeRepr::getRoot() {
138+
return const_cast<TypeRepr *>(
139+
const_cast<const DeclRefTypeRepr *>(this)->getRoot());
140+
}
141+
142+
const TypeRepr *DeclRefTypeRepr::getRoot() const {
143+
if (auto *ITR = dyn_cast<IdentTypeRepr>(this))
144+
return ITR;
145+
146+
return cast<MemberTypeRepr>(this)->getRoot();
147+
}
148+
137149
TypeDecl *DeclRefTypeRepr::getBoundDecl() const {
138150
return const_cast<DeclRefTypeRepr *>(this)
139151
->getLastComponent()
@@ -144,13 +156,6 @@ DeclNameRef DeclRefTypeRepr::getNameRef() const {
144156
return const_cast<DeclRefTypeRepr *>(this)->getLastComponent()->getNameRef();
145157
}
146158

147-
TypeRepr *DeclRefTypeRepr::getBaseComponent() {
148-
if (auto *ITR = dyn_cast<IdentTypeRepr>(this))
149-
return ITR;
150-
151-
return cast<MemberTypeRepr>(this)->getBaseComponent();
152-
}
153-
154159
IdentTypeRepr *DeclRefTypeRepr::getLastComponent() {
155160
if (auto *ITR = dyn_cast<IdentTypeRepr>(this))
156161
return ITR;
@@ -289,7 +294,7 @@ void IdentTypeRepr::printImpl(ASTPrinter &Printer,
289294

290295
void MemberTypeRepr::printImpl(ASTPrinter &Printer,
291296
const PrintOptions &Opts) const {
292-
printTypeRepr(getBaseComponent(), Printer, Opts);
297+
printTypeRepr(getRoot(), Printer, Opts);
293298
for (auto C : getMemberComponents()) {
294299
Printer << ".";
295300
printTypeRepr(C, Printer, Opts);
@@ -383,14 +388,14 @@ GenericIdentTypeRepr *GenericIdentTypeRepr::create(const ASTContext &C,
383388
return new (mem) GenericIdentTypeRepr(Loc, Id, GenericArgs, AngleBrackets);
384389
}
385390

386-
TypeRepr *MemberTypeRepr::create(const ASTContext &C, TypeRepr *Base,
391+
TypeRepr *MemberTypeRepr::create(const ASTContext &C, TypeRepr *Root,
387392
ArrayRef<IdentTypeRepr *> MemberComponents) {
388393
if (MemberComponents.empty())
389-
return Base;
394+
return Root;
390395

391396
auto size = totalSizeToAlloc<IdentTypeRepr *>(MemberComponents.size());
392397
auto mem = C.Allocate(size, alignof(MemberTypeRepr));
393-
return new (mem) MemberTypeRepr(Base, MemberComponents);
398+
return new (mem) MemberTypeRepr(Root, MemberComponents);
394399
}
395400

396401
DeclRefTypeRepr *MemberTypeRepr::create(const ASTContext &Ctx,

lib/Sema/AssociatedTypeInference.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1169,7 +1169,7 @@ struct TypeReprCycleCheckWalker : ASTWalker {
11691169

11701170
if (auto *memberTyR = dyn_cast<MemberTypeRepr>(T)) {
11711171
// If we're looking at a member type`Foo.Bar`, check `Foo` recursively.
1172-
auto *baseTyR = memberTyR->getBaseComponent();
1172+
auto *baseTyR = memberTyR->getRoot();
11731173
baseTyR->walk(*this);
11741174

11751175
// If we're inferring `Foo`, don't look at a witness mentioning `Self.Foo`.

lib/Sema/MiscDiagnostics.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -710,7 +710,7 @@ static void diagSyntacticUseRestrictions(const Expr *E, const DeclContext *DC,
710710
} else if (auto *TE = dyn_cast<TypeExpr>(E)) {
711711
if (auto *TR =
712712
dyn_cast_or_null<MemberTypeRepr>(TE->getTypeRepr())) {
713-
if (!isa<IdentTypeRepr>(TR->getBaseComponent())) {
713+
if (!isa<IdentTypeRepr>(TR->getRoot())) {
714714
behavior = DiagnosticBehavior::Warning;
715715
}
716716
}

lib/Sema/TypeCheckAvailability.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3932,13 +3932,13 @@ class TypeReprAvailabilityWalker : public ASTWalker {
39323932
if (!declRefTR)
39333933
return Action::Continue();
39343934

3935-
auto *baseComp = declRefTR->getBaseComponent();
3936-
if (auto *identBase = dyn_cast<IdentTypeRepr>(baseComp)) {
3935+
auto *rootComp = declRefTR->getRoot();
3936+
if (auto *identBase = dyn_cast<IdentTypeRepr>(rootComp)) {
39373937
if (checkIdentTypeRepr(identBase)) {
39383938
foundAnyIssues = true;
39393939
return Action::SkipNode();
39403940
}
3941-
} else if (diagnoseTypeReprAvailability(baseComp, where, flags)) {
3941+
} else if (diagnoseTypeReprAvailability(rootComp, where, flags)) {
39423942
foundAnyIssues = true;
39433943
return Action::SkipNode();
39443944
}

0 commit comments

Comments
 (0)