Skip to content

Commit fd93eea

Browse files
Merge pull request #70608 from AnthonyLatsis/unqualified-ident
[NFC] AST: Merge `SimpleIdentTypeRepr` & `GenericIdentTypeRepr` into `IdentTypeRepr`
2 parents 0ab9d2f + 5b7a8b6 commit fd93eea

37 files changed

+501
-441
lines changed

include/swift/AST/ASTBridging.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1525,8 +1525,8 @@ enum ENUM_EXTENSIBILITY_ATTR(open) BridgedAttributedTypeSpecifier : size_t {
15251525
BridgedAttributedTypeSpecifierTransferring,
15261526
};
15271527

1528-
SWIFT_NAME("BridgedSimpleIdentTypeRepr.createParsed(_:loc:name:)")
1529-
BridgedSimpleIdentTypeRepr BridgedSimpleIdentTypeRepr_createParsed(
1528+
SWIFT_NAME("BridgedUnqualifiedIdentTypeRepr.createParsed(_:loc:name:)")
1529+
BridgedUnqualifiedIdentTypeRepr BridgedUnqualifiedIdentTypeRepr_createParsed(
15301530
BridgedASTContext cContext, BridgedSourceLoc cLoc, BridgedIdentifier id);
15311531

15321532
SWIFT_NAME(
@@ -1574,9 +1574,9 @@ BridgedFunctionTypeRepr BridgedFunctionTypeRepr_createParsed(
15741574
BridgedNullableTypeRepr thrownType, BridgedSourceLoc cArrowLoc,
15751575
BridgedTypeRepr resultType);
15761576

1577-
SWIFT_NAME("BridgedGenericIdentTypeRepr.createParsed(_:name:nameLoc:"
1577+
SWIFT_NAME("BridgedUnqualifiedIdentTypeRepr.createParsed(_:name:nameLoc:"
15781578
"genericArgs:leftAngleLoc:rightAngleLoc:)")
1579-
BridgedGenericIdentTypeRepr BridgedGenericIdentTypeRepr_createParsed(
1579+
BridgedUnqualifiedIdentTypeRepr BridgedUnqualifiedIdentTypeRepr_createParsed(
15801580
BridgedASTContext cContext, BridgedIdentifier name,
15811581
BridgedSourceLoc cNameLoc, BridgedArrayRef genericArgs,
15821582
BridgedSourceLoc cLAngleLoc, BridgedSourceLoc cRAngleLoc);

include/swift/AST/ASTWalker.h

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,8 @@ enum class MacroWalking {
102102
None
103103
};
104104

105-
/// A scheme for walking a `MemberTypeRepr`.
106-
enum class MemberTypeReprWalkingScheme {
105+
/// A scheme for walking a `QualifiedIdentTypeRepr`.
106+
enum class QualifiedIdentTypeReprWalkingScheme {
107107
/// Walk in source order, such that each subsequent dot-separated component is
108108
/// a child of the previous one. For example, walk `A.B<T.U>.C` like so
109109
/// (top-down order):
@@ -593,9 +593,10 @@ class ASTWalker {
593593
return Action::Continue();
594594
}
595595

596-
/// This method configures how to walk `MemberTypeRepr` nodes.
597-
virtual MemberTypeReprWalkingScheme getMemberTypeReprWalkingScheme() const {
598-
return MemberTypeReprWalkingScheme::ASTOrderRecursive;
596+
/// This method configures how to walk `QualifiedIdentTypeRepr` nodes.
597+
virtual QualifiedIdentTypeReprWalkingScheme
598+
getQualifiedIdentTypeReprWalkingScheme() const {
599+
return QualifiedIdentTypeReprWalkingScheme::ASTOrderRecursive;
599600
}
600601

601602
/// This method configures whether the walker should explore into the generic

include/swift/AST/Attr.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ class ModuleDecl;
6666
class PatternBindingInitializer;
6767
class TrailingWhereClause;
6868
class TypeExpr;
69-
class IdentTypeRepr;
69+
class UnqualifiedIdentTypeRepr;
7070

7171
class alignas(1 << AttrAlignInBits) AttributeBase
7272
: public ASTAllocated<AttributeBase> {
@@ -1771,7 +1771,8 @@ class CustomAttr final : public DeclAttribute {
17711771
///
17721772
/// For an identifier type repr, return a pair of `nullptr` and the
17731773
/// identifier.
1774-
std::pair<IdentTypeRepr *, DeclRefTypeRepr *> destructureMacroRef();
1774+
std::pair<UnqualifiedIdentTypeRepr *, DeclRefTypeRepr *>
1775+
destructureMacroRef();
17751776

17761777
/// Whether the attribute has any arguments.
17771778
bool hasArgs() const { return argList != nullptr; }

include/swift/AST/TypeDeclFinder.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ class TypeDeclFinder : public TypeWalker {
4444
/// equivalently and where generic arguments can be walked to separately from
4545
/// the generic type.
4646
class SimpleTypeDeclFinder : public TypeDeclFinder {
47-
/// The function to call when a \c IdentTypeRepr is seen.
47+
/// The function to call when a \c TypeDecl is seen.
4848
llvm::function_ref<Action(const TypeDecl *)> Callback;
4949

5050
Action visitNominalType(NominalType *ty) override;

include/swift/AST/TypeRepr.h

Lines changed: 53 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -196,10 +196,12 @@ class alignas(1 << TypeReprAlignInBits) TypeRepr
196196
/// \c Type::getCanonicalType() or \c Type::getWithoutParens().
197197
TypeRepr *getWithoutParens() const;
198198

199-
/// Whether this is a `SimpleIdentTypeRepr` matching the given identifier.
199+
/// Whether this is a `UnqualifiedIdentTypeRepr` with no generic arguments,
200+
/// matching the given identifier.
200201
bool isSimpleUnqualifiedIdentifier(Identifier identifier) const;
201202

202-
/// Whether this is a `SimpleIdentTypeRepr` matching the given string.
203+
/// Whether this is a `UnqualifiedIdentTypeRepr` with no generic arguments,
204+
/// matching the given string.
203205
bool isSimpleUnqualifiedIdentifier(StringRef str) const;
204206

205207
//*** Allocation Routines ************************************************/
@@ -324,7 +326,7 @@ class AttributedTypeRepr final
324326
friend class TypeRepr;
325327
};
326328

327-
class IdentTypeRepr;
329+
class UnqualifiedIdentTypeRepr;
328330

329331
/// This is the abstract base class for types that directly reference a
330332
/// type declaration. In written syntax, this type representation consists of
@@ -361,15 +363,15 @@ class DeclRefTypeRepr : public TypeRepr {
361363
SourceRange AngleBrackets);
362364

363365
/// Returns the qualifier or base type representation. For example, `A.B`
364-
/// for `A.B.C`. The base of a `IdentTypeRepr` is null.
366+
/// for `A.B.C`. The base of a `UnqualifiedIdentTypeRepr` is null.
365367
TypeRepr *getBase() const;
366368

367369
/// Returns the root qualifier. For example, `A` for `A.B.C`. The root
368-
/// qualifier of a `IdentTypeRepr` is itself.
370+
/// qualifier of a `UnqualifiedIdentTypeRepr` is itself.
369371
TypeRepr *getRoot();
370372

371373
/// Returns the root qualifier. For example, `A` for `A.B.C`. The root
372-
/// qualifier of a `IdentTypeRepr` is itself.
374+
/// qualifier of a `UnqualifiedIdentTypeRepr` is itself.
373375
const TypeRepr *getRoot() const;
374376

375377
DeclNameLoc getNameLoc() const;
@@ -407,101 +409,62 @@ class DeclRefTypeRepr : public TypeRepr {
407409
SourceRange getAngleBrackets() const;
408410

409411
static bool classof(const TypeRepr *T) {
410-
return T->getKind() == TypeReprKind::SimpleIdent ||
411-
T->getKind() == TypeReprKind::GenericIdent ||
412-
T->getKind() == TypeReprKind::Member;
412+
return T->getKind() == TypeReprKind::UnqualifiedIdent ||
413+
T->getKind() == TypeReprKind::QualifiedIdent;
413414
}
414415
static bool classof(const DeclRefTypeRepr *T) { return true; }
415416

416417
protected:
417418
SourceLoc getLocImpl() const;
419+
SourceLoc getEndLocImpl() const;
418420

419421
void printImpl(ASTPrinter &Printer, const PrintOptions &Opts) const;
420422

421423
friend class TypeRepr;
422424
};
423425

424-
/// An identifier type with an optional set of generic arguments.
426+
/// An unqualified identifier type an optional set of generic arguments.
425427
/// \code
426428
/// Foo
427429
/// Bar<Gen>
428430
/// \endcode
429-
class IdentTypeRepr : public DeclRefTypeRepr {
430-
protected:
431-
IdentTypeRepr(TypeReprKind K, DeclNameLoc Loc, DeclNameRef Id,
432-
unsigned NumGenericArgs, bool hasGenericArgList)
433-
: DeclRefTypeRepr(K, Id, Loc, NumGenericArgs, hasGenericArgList) {}
431+
class UnqualifiedIdentTypeRepr final
432+
: public DeclRefTypeRepr,
433+
private llvm::TrailingObjects<UnqualifiedIdentTypeRepr, TypeRepr *,
434+
SourceRange> {
435+
friend TrailingObjects;
434436

435-
public:
436-
static bool classof(const TypeRepr *T) {
437-
return T->getKind() == TypeReprKind::SimpleIdent ||
438-
T->getKind() == TypeReprKind::GenericIdent;
437+
size_t numTrailingObjects(OverloadToken<TypeRepr *>) const {
438+
return getNumGenericArgs();
439439
}
440-
static bool classof(const IdentTypeRepr *T) { return true; }
441440

442-
protected:
443-
SourceLoc getStartLocImpl() const { return getNameLoc().getStartLoc(); }
441+
UnqualifiedIdentTypeRepr(DeclNameRef Name, DeclNameLoc NameLoc);
444442

445-
friend class TypeRepr;
446-
};
443+
UnqualifiedIdentTypeRepr(DeclNameRef Name, DeclNameLoc NameLoc,
444+
ArrayRef<TypeRepr *> GenericArgs,
445+
SourceRange AngleBrackets);
447446

448-
/// A simple identifier type like "Int".
449-
class SimpleIdentTypeRepr : public IdentTypeRepr {
450447
public:
451-
SimpleIdentTypeRepr(DeclNameLoc Loc, DeclNameRef Id)
452-
: IdentTypeRepr(TypeReprKind::SimpleIdent, Loc, Id, /*NumGenericArgs=*/0,
453-
/*HasAngleBrackets=*/false) {}
454-
455-
// SmallVector::emplace_back will never need to call this because
456-
// we reserve the right size, but it does try statically.
457-
SimpleIdentTypeRepr(const SimpleIdentTypeRepr &repr)
458-
: SimpleIdentTypeRepr(repr.getNameLoc(), repr.getNameRef()) {
459-
llvm_unreachable("should not be called dynamically");
460-
}
461-
462-
static bool classof(const TypeRepr *T) {
463-
return T->getKind() == TypeReprKind::SimpleIdent;
464-
}
465-
static bool classof(const SimpleIdentTypeRepr *T) { return true; }
466-
467-
private:
468-
SourceLoc getEndLocImpl() const { return getNameLoc().getEndLoc(); }
469-
friend class TypeRepr;
470-
};
471-
472-
/// An identifier type with generic arguments.
473-
/// \code
474-
/// Bar<Gen>
475-
/// \endcode
476-
class GenericIdentTypeRepr final
477-
: public IdentTypeRepr,
478-
private llvm::TrailingObjects<GenericIdentTypeRepr, TypeRepr *> {
479-
friend TrailingObjects;
480-
SourceRange AngleBrackets;
448+
static UnqualifiedIdentTypeRepr *
449+
create(const ASTContext &C, DeclNameLoc NameLoc, DeclNameRef Name);
481450

482-
GenericIdentTypeRepr(DeclNameLoc Loc, DeclNameRef Id,
483-
ArrayRef<TypeRepr *> GenericArgs,
484-
SourceRange AngleBrackets);
451+
static UnqualifiedIdentTypeRepr *create(const ASTContext &C,
452+
DeclNameLoc NameLoc, DeclNameRef Name,
453+
ArrayRef<TypeRepr *> GenericArgs,
454+
SourceRange AngleBrackets);
485455

486-
public:
487-
static GenericIdentTypeRepr *create(const ASTContext &C,
488-
DeclNameLoc Loc,
489-
DeclNameRef Id,
490-
ArrayRef<TypeRepr*> GenericArgs,
491-
SourceRange AngleBrackets);
456+
ArrayRef<TypeRepr *> getGenericArgs() const;
492457

493-
ArrayRef<TypeRepr*> getGenericArgs() const {
494-
return {getTrailingObjects<TypeRepr *>(), getNumGenericArgs()};
495-
}
496-
SourceRange getAngleBrackets() const { return AngleBrackets; }
458+
SourceRange getAngleBrackets() const;
497459

498460
static bool classof(const TypeRepr *T) {
499-
return T->getKind() == TypeReprKind::GenericIdent;
461+
return T->getKind() == TypeReprKind::UnqualifiedIdent;
500462
}
501-
static bool classof(const GenericIdentTypeRepr *T) { return true; }
463+
static bool classof(const UnqualifiedIdentTypeRepr *T) { return true; }
464+
465+
protected:
466+
SourceLoc getStartLocImpl() const { return getNameLoc().getStartLoc(); }
502467

503-
private:
504-
SourceLoc getEndLocImpl() const { return AngleBrackets.End; }
505468
friend class TypeRepr;
506469
};
507470

@@ -511,9 +474,10 @@ class GenericIdentTypeRepr final
511474
/// Foo.Bar<Gen>.Baz
512475
/// [Int].Bar
513476
/// \endcode
514-
class MemberTypeRepr final
477+
class QualifiedIdentTypeRepr final
515478
: public DeclRefTypeRepr,
516-
private llvm::TrailingObjects<MemberTypeRepr, TypeRepr *, SourceRange> {
479+
private llvm::TrailingObjects<QualifiedIdentTypeRepr, TypeRepr *,
480+
SourceRange> {
517481
friend TrailingObjects;
518482

519483
/// The qualifier or base type representation. For example, `A.B` for `A.B.C`.
@@ -523,19 +487,20 @@ class MemberTypeRepr final
523487
return getNumGenericArgs();
524488
}
525489

526-
MemberTypeRepr(TypeRepr *Base, DeclNameRef Name, DeclNameLoc NameLoc);
490+
QualifiedIdentTypeRepr(TypeRepr *Base, DeclNameRef Name, DeclNameLoc NameLoc);
527491

528-
MemberTypeRepr(TypeRepr *Base, DeclNameRef Name, DeclNameLoc NameLoc,
529-
ArrayRef<TypeRepr *> GenericArgs, SourceRange AngleBrackets);
492+
QualifiedIdentTypeRepr(TypeRepr *Base, DeclNameRef Name, DeclNameLoc NameLoc,
493+
ArrayRef<TypeRepr *> GenericArgs,
494+
SourceRange AngleBrackets);
530495

531496
public:
532-
static MemberTypeRepr *create(const ASTContext &C, TypeRepr *Base,
533-
DeclNameLoc NameLoc, DeclNameRef Name);
497+
static QualifiedIdentTypeRepr *create(const ASTContext &C, TypeRepr *Base,
498+
DeclNameLoc NameLoc, DeclNameRef Name);
534499

535-
static MemberTypeRepr *create(const ASTContext &C, TypeRepr *Base,
536-
DeclNameLoc NameLoc, DeclNameRef Name,
537-
ArrayRef<TypeRepr *> GenericArgs,
538-
SourceRange AngleBrackets);
500+
static QualifiedIdentTypeRepr *create(const ASTContext &C, TypeRepr *Base,
501+
DeclNameLoc NameLoc, DeclNameRef Name,
502+
ArrayRef<TypeRepr *> GenericArgs,
503+
SourceRange AngleBrackets);
539504

540505
/// Returns the qualifier or base type representation. For example, `A.B`
541506
/// for `A.B.C`.
@@ -549,13 +514,12 @@ class MemberTypeRepr final
549514
SourceRange getAngleBrackets() const;
550515

551516
static bool classof(const TypeRepr *T) {
552-
return T->getKind() == TypeReprKind::Member;
517+
return T->getKind() == TypeReprKind::QualifiedIdent;
553518
}
554-
static bool classof(const MemberTypeRepr *T) { return true; }
519+
static bool classof(const QualifiedIdentTypeRepr *T) { return true; }
555520

556521
private:
557522
SourceLoc getStartLocImpl() const;
558-
SourceLoc getEndLocImpl() const;
559523

560524
friend class TypeRepr;
561525
};
@@ -1640,9 +1604,8 @@ inline bool TypeRepr::isSimple() const {
16401604
case TypeReprKind::Existential:
16411605
case TypeReprKind::PackElement:
16421606
return false;
1643-
case TypeReprKind::SimpleIdent:
1644-
case TypeReprKind::GenericIdent:
1645-
case TypeReprKind::Member:
1607+
case TypeReprKind::UnqualifiedIdent:
1608+
case TypeReprKind::QualifiedIdent:
16461609
case TypeReprKind::Metatype:
16471610
case TypeReprKind::Protocol:
16481611
case TypeReprKind::Dictionary:

include/swift/AST/TypeReprNodes.def

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,8 @@ TYPEREPR(Error, TypeRepr)
4646
TYPEREPR(Attributed, TypeRepr)
4747

4848
ABSTRACT_TYPEREPR(DeclRef, TypeRepr)
49-
ABSTRACT_TYPEREPR(Ident, DeclRefTypeRepr)
50-
TYPEREPR(SimpleIdent, IdentTypeRepr)
51-
TYPEREPR(GenericIdent, IdentTypeRepr)
52-
TYPEREPR(Member, DeclRefTypeRepr)
53-
49+
TYPEREPR(UnqualifiedIdent, DeclRefTypeRepr)
50+
TYPEREPR(QualifiedIdent, DeclRefTypeRepr)
5451
TYPEREPR(Function, TypeRepr)
5552
TYPEREPR(Array, TypeRepr)
5653
TYPEREPR(Dictionary, TypeRepr)

include/swift/Parse/Parser.h

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -42,23 +42,16 @@ namespace llvm {
4242
}
4343

4444
namespace swift {
45-
class IdentTypeRepr;
46-
class ErrorTypeRepr;
4745
class CodeCompletionCallbacks;
4846
class DoneParsingCallback;
49-
class IDEInspectionCallbacksFactory;
5047
class DefaultArgumentInitializer;
5148
class DiagnosticEngine;
5249
class Expr;
5350
class Lexer;
5451
class PersistentParserState;
5552
class RequirementRepr;
5653
class SILParserStateBase;
57-
class ScopeInfo;
58-
class SingleValueStmtExpr;
5954
class SourceManager;
60-
class TupleType;
61-
class TypeLoc;
6255
class UUID;
6356

6457
struct EnumElementInfo;

lib/AST/ASTBridging.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2052,14 +2052,14 @@ BridgedTypeAttribute BridgedTypeAttribute_createIsolated(
20522052
// MARK: TypeReprs
20532053
//===----------------------------------------------------------------------===//
20542054

2055-
BridgedSimpleIdentTypeRepr BridgedSimpleIdentTypeRepr_createParsed(
2055+
BridgedUnqualifiedIdentTypeRepr BridgedUnqualifiedIdentTypeRepr_createParsed(
20562056
BridgedASTContext cContext, BridgedSourceLoc cLoc, BridgedIdentifier id) {
2057-
ASTContext &context = cContext.unbridged();
2058-
return new (context) SimpleIdentTypeRepr(DeclNameLoc(cLoc.unbridged()),
2059-
DeclNameRef(id.unbridged()));
2057+
return UnqualifiedIdentTypeRepr::create(cContext.unbridged(),
2058+
DeclNameLoc(cLoc.unbridged()),
2059+
DeclNameRef(id.unbridged()));
20602060
}
20612061

2062-
BridgedGenericIdentTypeRepr BridgedGenericIdentTypeRepr_createParsed(
2062+
BridgedUnqualifiedIdentTypeRepr BridgedUnqualifiedIdentTypeRepr_createParsed(
20632063
BridgedASTContext cContext, BridgedIdentifier name,
20642064
BridgedSourceLoc cNameLoc, BridgedArrayRef genericArgs,
20652065
BridgedSourceLoc cLAngleLoc, BridgedSourceLoc cRAngleLoc) {
@@ -2068,9 +2068,9 @@ BridgedGenericIdentTypeRepr BridgedGenericIdentTypeRepr_createParsed(
20682068
auto Name = DeclNameRef(name.unbridged());
20692069
SourceLoc lAngleLoc = cLAngleLoc.unbridged();
20702070
SourceLoc rAngleLoc = cRAngleLoc.unbridged();
2071-
return GenericIdentTypeRepr::create(context, Loc, Name,
2072-
genericArgs.unbridged<TypeRepr *>(),
2073-
SourceRange{lAngleLoc, rAngleLoc});
2071+
return UnqualifiedIdentTypeRepr::create(context, Loc, Name,
2072+
genericArgs.unbridged<TypeRepr *>(),
2073+
SourceRange{lAngleLoc, rAngleLoc});
20742074
}
20752075

20762076
BridgedOptionalTypeRepr

0 commit comments

Comments
 (0)