Skip to content

Commit 00d09b1

Browse files
committed
AST: Allow passing arbitrary parent TypeRepr to TypeExpr::createForMemberDecl
1 parent 1d8962f commit 00d09b1

File tree

2 files changed

+20
-15
lines changed

2 files changed

+20
-15
lines changed

include/swift/AST/Expr.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1340,9 +1340,9 @@ class TypeExpr : public Expr {
13401340
TypeDecl *Decl);
13411341

13421342
/// Create a \c TypeExpr for a member \c TypeDecl of the given parent
1343-
/// \c DeclRefTypeRepr.
1344-
static TypeExpr *createForMemberDecl(DeclRefTypeRepr *ParentTR,
1345-
DeclNameLoc NameLoc, TypeDecl *Decl);
1343+
/// \c TypeRepr.
1344+
static TypeExpr *createForMemberDecl(TypeRepr *ParentTR, DeclNameLoc NameLoc,
1345+
TypeDecl *Decl);
13461346

13471347
/// Create a \c TypeExpr from an \c DeclRefTypeRepr with the given arguments
13481348
/// applied at the specified location.

lib/AST/Expr.cpp

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2224,24 +2224,29 @@ TypeExpr *TypeExpr::createForMemberDecl(DeclNameLoc ParentNameLoc,
22242224
return new (C) TypeExpr(TR);
22252225
}
22262226

2227-
TypeExpr *TypeExpr::createForMemberDecl(DeclRefTypeRepr *ParentTR,
2228-
DeclNameLoc NameLoc, TypeDecl *Decl) {
2227+
TypeExpr *TypeExpr::createForMemberDecl(TypeRepr *ParentTR, DeclNameLoc NameLoc,
2228+
TypeDecl *Decl) {
22292229
ASTContext &C = Decl->getASTContext();
22302230

2231-
// Create a new list of components.
2232-
SmallVector<IdentTypeRepr *, 2> Components;
2233-
if (auto *MemberTR = dyn_cast<MemberTypeRepr>(ParentTR)) {
2234-
auto MemberComps = MemberTR->getMemberComponents();
2235-
Components.append(MemberComps.begin(), MemberComps.end());
2236-
}
2237-
22382231
// Add a new component for the member we just found.
22392232
auto *NewComp = new (C) SimpleIdentTypeRepr(NameLoc, Decl->createNameRef());
22402233
NewComp->setValue(Decl, nullptr);
2241-
Components.push_back(NewComp);
22422234

2243-
auto *TR =
2244-
MemberTypeRepr::create(C, ParentTR->getBaseComponent(), Components);
2235+
TypeRepr *TR = nullptr;
2236+
if (auto *DeclRefTR = dyn_cast<DeclRefTypeRepr>(ParentTR)) {
2237+
// Create a new list of components.
2238+
SmallVector<IdentTypeRepr *, 4> Components;
2239+
if (auto *MemberTR = dyn_cast<MemberTypeRepr>(ParentTR)) {
2240+
auto MemberComps = MemberTR->getMemberComponents();
2241+
Components.append(MemberComps.begin(), MemberComps.end());
2242+
}
2243+
2244+
Components.push_back(NewComp);
2245+
TR = MemberTypeRepr::create(C, DeclRefTR->getBaseComponent(), Components);
2246+
} else {
2247+
TR = MemberTypeRepr::create(C, ParentTR, NewComp);
2248+
}
2249+
22452250
return new (C) TypeExpr(TR);
22462251
}
22472252

0 commit comments

Comments
 (0)