Skip to content

Commit 7e7f6d8

Browse files
committed
[NFC] AST: Construct SimpleIdentTypeRepr & GenericIdentTypeRepr through IdentTypeRepr
1 parent 68746a0 commit 7e7f6d8

File tree

11 files changed

+94
-63
lines changed

11 files changed

+94
-63
lines changed

include/swift/AST/ASTBridging.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1517,8 +1517,8 @@ enum ENUM_EXTENSIBILITY_ATTR(open) BridgedAttributedTypeSpecifier : size_t {
15171517
BridgedAttributedTypeSpecifierTransferring,
15181518
};
15191519

1520-
SWIFT_NAME("BridgedSimpleIdentTypeRepr.createParsed(_:loc:name:)")
1521-
BridgedSimpleIdentTypeRepr BridgedSimpleIdentTypeRepr_createParsed(
1520+
SWIFT_NAME("BridgedUnqualifiedIdentTypeRepr.createParsed(_:loc:name:)")
1521+
BridgedUnqualifiedIdentTypeRepr BridgedUnqualifiedIdentTypeRepr_createParsed(
15221522
BridgedASTContext cContext, BridgedSourceLoc cLoc, BridgedIdentifier id);
15231523

15241524
SWIFT_NAME(
@@ -1566,9 +1566,9 @@ BridgedFunctionTypeRepr BridgedFunctionTypeRepr_createParsed(
15661566
BridgedNullableTypeRepr thrownType, BridgedSourceLoc cArrowLoc,
15671567
BridgedTypeRepr resultType);
15681568

1569-
SWIFT_NAME("BridgedGenericIdentTypeRepr.createParsed(_:name:nameLoc:"
1569+
SWIFT_NAME("BridgedUnqualifiedIdentTypeRepr.createParsed(_:name:nameLoc:"
15701570
"genericArgs:leftAngleLoc:rightAngleLoc:)")
1571-
BridgedGenericIdentTypeRepr BridgedGenericIdentTypeRepr_createParsed(
1571+
BridgedUnqualifiedIdentTypeRepr BridgedUnqualifiedIdentTypeRepr_createParsed(
15721572
BridgedASTContext cContext, BridgedIdentifier name,
15731573
BridgedSourceLoc cNameLoc, BridgedArrayRef genericArgs,
15741574
BridgedSourceLoc cLAngleLoc, BridgedSourceLoc cRAngleLoc);

include/swift/AST/TypeRepr.h

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -433,6 +433,14 @@ class UnqualifiedIdentTypeRepr : public DeclRefTypeRepr {
433433
: DeclRefTypeRepr(K, Id, Loc, NumGenericArgs, hasGenericArgList) {}
434434

435435
public:
436+
static UnqualifiedIdentTypeRepr *
437+
create(const ASTContext &C, DeclNameLoc NameLoc, DeclNameRef Name);
438+
439+
static UnqualifiedIdentTypeRepr *create(const ASTContext &C,
440+
DeclNameLoc NameLoc, DeclNameRef Name,
441+
ArrayRef<TypeRepr *> GenericArgs,
442+
SourceRange AngleBrackets);
443+
436444
static bool classof(const TypeRepr *T) {
437445
return T->getKind() == TypeReprKind::SimpleIdent ||
438446
T->getKind() == TypeReprKind::GenericIdent;
@@ -447,12 +455,14 @@ class UnqualifiedIdentTypeRepr : public DeclRefTypeRepr {
447455

448456
/// A simple identifier type like "Int".
449457
class SimpleIdentTypeRepr : public UnqualifiedIdentTypeRepr {
450-
public:
458+
friend UnqualifiedIdentTypeRepr;
459+
451460
SimpleIdentTypeRepr(DeclNameLoc Loc, DeclNameRef Id)
452461
: UnqualifiedIdentTypeRepr(TypeReprKind::SimpleIdent, Loc, Id,
453462
/*NumGenericArgs=*/0,
454463
/*HasAngleBrackets=*/false) {}
455464

465+
public:
456466
// SmallVector::emplace_back will never need to call this because
457467
// we reserve the right size, but it does try statically.
458468
SimpleIdentTypeRepr(const SimpleIdentTypeRepr &repr)
@@ -477,20 +487,21 @@ class SimpleIdentTypeRepr : public UnqualifiedIdentTypeRepr {
477487
class GenericIdentTypeRepr final
478488
: public UnqualifiedIdentTypeRepr,
479489
private llvm::TrailingObjects<GenericIdentTypeRepr, TypeRepr *> {
490+
friend UnqualifiedIdentTypeRepr;
480491
friend TrailingObjects;
481492
SourceRange AngleBrackets;
482493

483494
GenericIdentTypeRepr(DeclNameLoc Loc, DeclNameRef Id,
484495
ArrayRef<TypeRepr *> GenericArgs,
485496
SourceRange AngleBrackets);
486497

487-
public:
488498
static GenericIdentTypeRepr *create(const ASTContext &C,
489499
DeclNameLoc Loc,
490500
DeclNameRef Id,
491501
ArrayRef<TypeRepr*> GenericArgs,
492502
SourceRange AngleBrackets);
493503

504+
public:
494505
ArrayRef<TypeRepr*> getGenericArgs() const {
495506
return {getTrailingObjects<TypeRepr *>(), getNumGenericArgs()};
496507
}

lib/AST/ASTBridging.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2040,14 +2040,14 @@ BridgedTypeAttribute BridgedTypeAttribute_createIsolated(
20402040
// MARK: TypeReprs
20412041
//===----------------------------------------------------------------------===//
20422042

2043-
BridgedSimpleIdentTypeRepr BridgedSimpleIdentTypeRepr_createParsed(
2043+
BridgedUnqualifiedIdentTypeRepr BridgedUnqualifiedIdentTypeRepr_createParsed(
20442044
BridgedASTContext cContext, BridgedSourceLoc cLoc, BridgedIdentifier id) {
2045-
ASTContext &context = cContext.unbridged();
2046-
return new (context) SimpleIdentTypeRepr(DeclNameLoc(cLoc.unbridged()),
2047-
DeclNameRef(id.unbridged()));
2045+
return UnqualifiedIdentTypeRepr::create(cContext.unbridged(),
2046+
DeclNameLoc(cLoc.unbridged()),
2047+
DeclNameRef(id.unbridged()));
20482048
}
20492049

2050-
BridgedGenericIdentTypeRepr BridgedGenericIdentTypeRepr_createParsed(
2050+
BridgedUnqualifiedIdentTypeRepr BridgedUnqualifiedIdentTypeRepr_createParsed(
20512051
BridgedASTContext cContext, BridgedIdentifier name,
20522052
BridgedSourceLoc cNameLoc, BridgedArrayRef genericArgs,
20532053
BridgedSourceLoc cLAngleLoc, BridgedSourceLoc cRAngleLoc) {
@@ -2056,9 +2056,9 @@ BridgedGenericIdentTypeRepr BridgedGenericIdentTypeRepr_createParsed(
20562056
auto Name = DeclNameRef(name.unbridged());
20572057
SourceLoc lAngleLoc = cLAngleLoc.unbridged();
20582058
SourceLoc rAngleLoc = cRAngleLoc.unbridged();
2059-
return GenericIdentTypeRepr::create(context, Loc, Name,
2060-
genericArgs.unbridged<TypeRepr *>(),
2061-
SourceRange{lAngleLoc, rAngleLoc});
2059+
return UnqualifiedIdentTypeRepr::create(context, Loc, Name,
2060+
genericArgs.unbridged<TypeRepr *>(),
2061+
SourceRange{lAngleLoc, rAngleLoc});
20622062
}
20632063

20642064
BridgedOptionalTypeRepr

lib/AST/Expr.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2211,15 +2211,15 @@ TypeExpr *TypeExpr::createForDecl(DeclNameLoc Loc, TypeDecl *Decl,
22112211
DeclContext *DC) {
22122212
ASTContext &C = Decl->getASTContext();
22132213
assert(Loc.isValid());
2214-
auto *Repr = new (C) SimpleIdentTypeRepr(Loc, Decl->createNameRef());
2214+
auto *Repr = UnqualifiedIdentTypeRepr::create(C, Loc, Decl->createNameRef());
22152215
Repr->setValue(Decl, DC);
22162216
return new (C) TypeExpr(Repr);
22172217
}
22182218

22192219
TypeExpr *TypeExpr::createImplicitForDecl(DeclNameLoc Loc, TypeDecl *Decl,
22202220
DeclContext *DC, Type ty) {
22212221
ASTContext &C = Decl->getASTContext();
2222-
auto *Repr = new (C) SimpleIdentTypeRepr(Loc, Decl->createNameRef());
2222+
auto *Repr = UnqualifiedIdentTypeRepr::create(C, Loc, Decl->createNameRef());
22232223
Repr->setValue(Decl, DC);
22242224
auto result = new (C) TypeExpr(Repr);
22252225
assert(ty && !ty->hasTypeParameter());
@@ -2237,8 +2237,8 @@ TypeExpr *TypeExpr::createForMemberDecl(DeclNameLoc ParentNameLoc,
22372237
assert(NameLoc.isValid());
22382238

22392239
// The base is the parent type.
2240-
auto *BaseTR =
2241-
new (C) SimpleIdentTypeRepr(ParentNameLoc, Parent->createNameRef());
2240+
auto *BaseTR = UnqualifiedIdentTypeRepr::create(C, ParentNameLoc,
2241+
Parent->createNameRef());
22422242
BaseTR->setValue(Parent, nullptr);
22432243

22442244
auto *MemberTR =
@@ -2271,7 +2271,7 @@ TypeExpr *TypeExpr::createForSpecializedDecl(DeclRefTypeRepr *ParentTR,
22712271
}
22722272

22732273
if (isa<UnqualifiedIdentTypeRepr>(ParentTR)) {
2274-
specializedTR = GenericIdentTypeRepr::create(
2274+
specializedTR = UnqualifiedIdentTypeRepr::create(
22752275
C, ParentTR->getNameLoc(), ParentTR->getNameRef(), Args, AngleLocs);
22762276
specializedTR->setValue(boundDecl, ParentTR->getDeclContext());
22772277
} else {

lib/AST/NameLookup.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3761,8 +3761,8 @@ CustomAttrNominalRequest::evaluate(Evaluator &evaluator,
37613761
assocType->getDescriptiveKind(),
37623762
assocType->getName());
37633763

3764-
auto *baseTR = new (ctx) SimpleIdentTypeRepr(
3765-
identTypeRepr->getNameLoc(), DeclNameRef(moduleName));
3764+
auto *baseTR = UnqualifiedIdentTypeRepr::create(
3765+
ctx, identTypeRepr->getNameLoc(), DeclNameRef(moduleName));
37663766

37673767
auto *newTE = new (ctx) TypeExpr(
37683768
MemberTypeRepr::create(ctx, baseTR, identTypeRepr->getNameLoc(),

lib/AST/TypeRepr.cpp

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ DeclRefTypeRepr *DeclRefTypeRepr::create(const ASTContext &C, TypeRepr *Base,
170170
return MemberTypeRepr::create(C, Base, NameLoc, Name);
171171
}
172172

173-
return new (C) SimpleIdentTypeRepr(NameLoc, Name);
173+
return UnqualifiedIdentTypeRepr::create(C, NameLoc, Name);
174174
}
175175

176176
DeclRefTypeRepr *DeclRefTypeRepr::create(const ASTContext &C, TypeRepr *Base,
@@ -180,12 +180,10 @@ DeclRefTypeRepr *DeclRefTypeRepr::create(const ASTContext &C, TypeRepr *Base,
180180
if (Base) {
181181
return MemberTypeRepr::create(C, Base, NameLoc, Name, GenericArgs,
182182
AngleBrackets);
183-
} else if (AngleBrackets.isInvalid() && GenericArgs.empty()) {
184-
return new (C) SimpleIdentTypeRepr(NameLoc, Name);
185183
}
186184

187-
return GenericIdentTypeRepr::create(C, NameLoc, Name, GenericArgs,
188-
AngleBrackets);
185+
return UnqualifiedIdentTypeRepr::create(C, NameLoc, Name, GenericArgs,
186+
AngleBrackets);
189187
}
190188

191189
TypeRepr *DeclRefTypeRepr::getBase() const {
@@ -478,6 +476,23 @@ TupleTypeRepr *TupleTypeRepr::createEmpty(const ASTContext &C,
478476
return create(C, {}, Parens);
479477
}
480478

479+
UnqualifiedIdentTypeRepr *UnqualifiedIdentTypeRepr::create(const ASTContext &C,
480+
DeclNameLoc NameLoc,
481+
DeclNameRef Name) {
482+
return new (C) SimpleIdentTypeRepr(NameLoc, Name);
483+
}
484+
485+
UnqualifiedIdentTypeRepr *UnqualifiedIdentTypeRepr::create(
486+
const ASTContext &C, DeclNameLoc NameLoc, DeclNameRef Name,
487+
ArrayRef<TypeRepr *> GenericArgs, SourceRange AngleBrackets) {
488+
if (AngleBrackets.isInvalid() && GenericArgs.empty()) {
489+
return new (C) SimpleIdentTypeRepr(NameLoc, Name);
490+
}
491+
492+
return GenericIdentTypeRepr::create(C, NameLoc, Name, GenericArgs,
493+
AngleBrackets);
494+
}
495+
481496
GenericIdentTypeRepr::GenericIdentTypeRepr(DeclNameLoc Loc, DeclNameRef Id,
482497
ArrayRef<TypeRepr *> GenericArgs,
483498
SourceRange AngleBrackets)

lib/ASTGen/Sources/ASTGen/Types.swift

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,14 +120,14 @@ extension ASTGenVisitor {
120120
let id = self.generateIdentifier(node.name)
121121

122122
guard let generics = node.genericArgumentClause else {
123-
return BridgedSimpleIdentTypeRepr.createParsed(ctx, loc: loc, name: id).asTypeRepr
123+
return BridgedUnqualifiedIdentTypeRepr.createParsed(ctx, loc: loc, name: id).asTypeRepr
124124
}
125125

126126
let genericArguments = generics.arguments.lazy.map {
127127
self.generate(type: $0.argument)
128128
}
129129

130-
return BridgedGenericIdentTypeRepr.createParsed(
130+
return BridgedUnqualifiedIdentTypeRepr.createParsed(
131131
self.ctx,
132132
name: id,
133133
nameLoc: loc,
@@ -325,7 +325,7 @@ extension ASTGenVisitor {
325325
)
326326
}
327327

328-
func generate(classRestrictionType node: ClassRestrictionTypeSyntax) -> BridgedSimpleIdentTypeRepr {
328+
func generate(classRestrictionType node: ClassRestrictionTypeSyntax) -> BridgedUnqualifiedIdentTypeRepr {
329329
// TODO: diagnostics.
330330
// warning: using 'class' keyword to define a class-constrained protocol is deprecated; use 'AnyObject' instead
331331
return .createParsed(

lib/Parse/ParseDecl.cpp

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6719,11 +6719,9 @@ ParserStatus Parser::parseInheritance(
67196719
classRequirementLoc = classLoc;
67206720

67216721
// Add 'AnyObject' to the inherited list.
6722-
Inherited.push_back(
6723-
InheritedEntry(
6724-
new (Context) SimpleIdentTypeRepr(
6725-
DeclNameLoc(classLoc),
6726-
DeclNameRef(Context.getIdentifier("AnyObject")))));
6722+
Inherited.push_back(InheritedEntry(UnqualifiedIdentTypeRepr::create(
6723+
Context, DeclNameLoc(classLoc),
6724+
DeclNameRef(Context.getIdentifier("AnyObject")))));
67276725
continue;
67286726
}
67296727

lib/Sema/TypeCheckPattern.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -194,15 +194,16 @@ static DeclRefTypeRepr *translateExprToDeclRefTypeRepr(Expr *E, ASTContext &C) {
194194
return nullptr;
195195
}
196196

197-
auto *repr =
198-
new (C) SimpleIdentTypeRepr(dre->getNameLoc(), td->createNameRef());
197+
auto *repr = UnqualifiedIdentTypeRepr::create(C, dre->getNameLoc(),
198+
td->createNameRef());
199199
repr->setValue(td, nullptr);
200200

201201
return repr;
202202
}
203203

204204
DeclRefTypeRepr *visitUnresolvedDeclRefExpr(UnresolvedDeclRefExpr *udre) {
205-
return new (C) SimpleIdentTypeRepr(udre->getNameLoc(), udre->getName());
205+
return UnqualifiedIdentTypeRepr::create(C, udre->getNameLoc(),
206+
udre->getName());
206207
}
207208

208209
DeclRefTypeRepr *visitUnresolvedDotExpr(UnresolvedDotExpr *ude) {

lib/Sema/TypeCheckType.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4249,8 +4249,8 @@ NeverNullType TypeResolver::resolveSILFunctionType(FunctionTypeRepr *repr,
42494249
if (*parsedRep == SILFunctionType::Representation::WitnessMethod) {
42504250
auto protocolName = conventionAttr->getWitnessMethodProtocol();
42514251
// FIXME: parse the DeclNameLoc to here
4252-
witnessMethodProtocol =
4253-
new (getASTContext()) SimpleIdentTypeRepr(DeclNameLoc(), protocolName);
4252+
witnessMethodProtocol = UnqualifiedIdentTypeRepr::create(
4253+
getASTContext(), DeclNameLoc(), protocolName);
42544254
}
42554255
}
42564256
}

0 commit comments

Comments
 (0)