@@ -6380,45 +6380,44 @@ class OperatorDecl : public Decl {
6380
6380
6381
6381
Identifier name;
6382
6382
6383
- Identifier DesignatedNominalTypeName ;
6384
- SourceLoc DesignatedNominalTypeNameLoc ;
6385
- NominalTypeDecl *DesignatedNominalType = nullptr ;
6383
+ ArrayRef< Identifier> Identifiers ;
6384
+ ArrayRef< SourceLoc> IdentifierLocs ;
6385
+ ArrayRef< NominalTypeDecl *> DesignatedNominalTypes ;
6386
6386
6387
6387
public:
6388
6388
OperatorDecl (DeclKind kind, DeclContext *DC, SourceLoc OperatorLoc,
6389
6389
Identifier Name, SourceLoc NameLoc,
6390
- Identifier DesignatedNominalTypeName = Identifier() ,
6391
- SourceLoc DesignatedNominalTypeNameLoc = SourceLoc() )
6390
+ ArrayRef< Identifier> Identifiers ,
6391
+ ArrayRef< SourceLoc> IdentifierLocs )
6392
6392
: Decl(kind, DC), OperatorLoc(OperatorLoc), NameLoc(NameLoc), name(Name),
6393
- DesignatedNominalTypeName (DesignatedNominalTypeName),
6394
- DesignatedNominalTypeNameLoc(DesignatedNominalTypeNameLoc) {}
6393
+ Identifiers (Identifiers), IdentifierLocs(IdentifierLocs) {}
6395
6394
6396
6395
OperatorDecl (DeclKind kind, DeclContext *DC, SourceLoc OperatorLoc,
6397
6396
Identifier Name, SourceLoc NameLoc,
6398
- NominalTypeDecl *DesignatedNominalType )
6397
+ ArrayRef< NominalTypeDecl *> DesignatedNominalTypes )
6399
6398
: Decl(kind, DC), OperatorLoc(OperatorLoc), NameLoc(NameLoc), name(Name),
6400
- DesignatedNominalType(DesignatedNominalType ) {}
6399
+ DesignatedNominalTypes(DesignatedNominalTypes ) {}
6401
6400
6402
6401
SourceLoc getLoc () const { return NameLoc; }
6403
6402
6404
6403
SourceLoc getOperatorLoc () const { return OperatorLoc; }
6405
6404
SourceLoc getNameLoc () const { return NameLoc; }
6406
6405
Identifier getName () const { return name; }
6407
6406
6408
- Identifier getDesignatedNominalTypeName () const {
6409
- return DesignatedNominalTypeName ;
6407
+ ArrayRef< Identifier> getIdentifiers () const {
6408
+ return Identifiers ;
6410
6409
}
6411
6410
6412
- SourceLoc getDesignatedNominalTypeNameLoc () const {
6413
- return DesignatedNominalTypeNameLoc ;
6411
+ ArrayRef< SourceLoc> getIdentifierLocs () const {
6412
+ return IdentifierLocs ;
6414
6413
}
6415
6414
6416
- NominalTypeDecl *getDesignatedNominalType () const {
6417
- return DesignatedNominalType ;
6415
+ ArrayRef< NominalTypeDecl *> getDesignatedNominalTypes () const {
6416
+ return DesignatedNominalTypes ;
6418
6417
}
6419
6418
6420
- void setDesignatedNominalType ( NominalTypeDecl *nominal ) {
6421
- DesignatedNominalType = nominal ;
6419
+ void setDesignatedNominalTypes (ArrayRef< NominalTypeDecl *> nominalTypes ) {
6420
+ DesignatedNominalTypes = nominalTypes ;
6422
6421
}
6423
6422
6424
6423
static bool classof (const Decl *D) {
@@ -6436,46 +6435,39 @@ class OperatorDecl : public Decl {
6436
6435
// / infix operator /+/ : AdditionPrecedence, Numeric
6437
6436
// / \endcode
6438
6437
class InfixOperatorDecl : public OperatorDecl {
6439
- SourceLoc ColonLoc, FirstIdentifierLoc, SecondIdentifierLoc;
6440
- Identifier FirstIdentifier, SecondIdentifier;
6438
+ SourceLoc ColonLoc;
6441
6439
PrecedenceGroupDecl *PrecedenceGroup = nullptr ;
6442
6440
6443
6441
public:
6444
6442
InfixOperatorDecl (DeclContext *DC, SourceLoc operatorLoc, Identifier name,
6445
6443
SourceLoc nameLoc, SourceLoc colonLoc,
6446
- Identifier firstIdentifier, SourceLoc firstIdentifierLoc,
6447
- Identifier secondIdentifier = Identifier(),
6448
- SourceLoc secondIdentifierLoc = SourceLoc())
6449
- : OperatorDecl(DeclKind::InfixOperator, DC, operatorLoc, name, nameLoc),
6450
- ColonLoc (colonLoc), FirstIdentifierLoc(firstIdentifierLoc),
6451
- SecondIdentifierLoc(secondIdentifierLoc),
6452
- FirstIdentifier(firstIdentifier), SecondIdentifier(secondIdentifier) {}
6444
+ ArrayRef<Identifier> identifiers,
6445
+ ArrayRef<SourceLoc> identifierLocs)
6446
+ : OperatorDecl(DeclKind::InfixOperator, DC, operatorLoc, name, nameLoc,
6447
+ identifiers, identifierLocs),
6448
+ ColonLoc (colonLoc) {}
6453
6449
6454
6450
InfixOperatorDecl (DeclContext *DC, SourceLoc operatorLoc, Identifier name,
6455
6451
SourceLoc nameLoc, SourceLoc colonLoc,
6456
6452
PrecedenceGroupDecl *precedenceGroup,
6457
- NominalTypeDecl *designatedNominalType )
6453
+ ArrayRef< NominalTypeDecl *> designatedNominalTypes )
6458
6454
: OperatorDecl(DeclKind::InfixOperator, DC, operatorLoc, name, nameLoc,
6459
- designatedNominalType ),
6455
+ designatedNominalTypes ),
6460
6456
ColonLoc(colonLoc), PrecedenceGroup(precedenceGroup) {}
6461
6457
6462
6458
SourceLoc getEndLoc () const {
6463
- if (!SecondIdentifier. empty ())
6464
- return SecondIdentifierLoc;
6465
- if (!FirstIdentifier. empty ())
6466
- return FirstIdentifierLoc;
6467
- return getNameLoc ();
6459
+ auto identifierLocs = getIdentifierLocs ();
6460
+ if (identifierLocs. empty ())
6461
+ return getNameLoc ();
6462
+
6463
+ return identifierLocs. back ();
6468
6464
}
6465
+
6469
6466
SourceRange getSourceRange () const {
6470
6467
return { getOperatorLoc (), getEndLoc () };
6471
6468
}
6472
6469
6473
6470
SourceLoc getColonLoc () const { return ColonLoc; }
6474
- SourceLoc getFirstIdentifierLoc () const { return FirstIdentifierLoc; }
6475
- SourceLoc getSecondIdentifierLoc () const { return SecondIdentifierLoc; }
6476
-
6477
- Identifier getFirstIdentifier () const { return FirstIdentifier; }
6478
- Identifier getSecondIdentifier () const { return SecondIdentifier; }
6479
6471
6480
6472
PrecedenceGroupDecl *getPrecedenceGroup () const { return PrecedenceGroup; }
6481
6473
void setPrecedenceGroup (PrecedenceGroupDecl *PGD) {
@@ -6502,15 +6494,16 @@ class PrefixOperatorDecl : public OperatorDecl {
6502
6494
public:
6503
6495
PrefixOperatorDecl (DeclContext *DC, SourceLoc OperatorLoc, Identifier Name,
6504
6496
SourceLoc NameLoc,
6505
- Identifier DesignatedNominalTypeName = Identifier() ,
6506
- SourceLoc DesignatedNominalTypeNameLoc = SourceLoc() )
6497
+ ArrayRef< Identifier> Identifiers ,
6498
+ ArrayRef< SourceLoc> IdentifierLocs )
6507
6499
: OperatorDecl(DeclKind::PrefixOperator, DC, OperatorLoc, Name, NameLoc,
6508
- DesignatedNominalTypeName, DesignatedNominalTypeNameLoc ) {}
6500
+ Identifiers, IdentifierLocs ) {}
6509
6501
6510
6502
PrefixOperatorDecl (DeclContext *DC, SourceLoc OperatorLoc, Identifier Name,
6511
- SourceLoc NameLoc, NominalTypeDecl *DesignatedNominalType)
6503
+ SourceLoc NameLoc,
6504
+ ArrayRef<NominalTypeDecl *> designatedNominalTypes)
6512
6505
: OperatorDecl(DeclKind::PrefixOperator, DC, OperatorLoc, Name, NameLoc,
6513
- DesignatedNominalType ) {}
6506
+ designatedNominalTypes ) {}
6514
6507
6515
6508
SourceRange getSourceRange () const {
6516
6509
return { getOperatorLoc (), getNameLoc () };
@@ -6536,15 +6529,16 @@ class PostfixOperatorDecl : public OperatorDecl {
6536
6529
public:
6537
6530
PostfixOperatorDecl (DeclContext *DC, SourceLoc OperatorLoc, Identifier Name,
6538
6531
SourceLoc NameLoc,
6539
- Identifier DesignatedNominalTypeName = Identifier() ,
6540
- SourceLoc DesignatedNominalTypeNameLoc = SourceLoc() )
6532
+ ArrayRef< Identifier> Identifiers ,
6533
+ ArrayRef< SourceLoc> IdentifierLocs )
6541
6534
: OperatorDecl(DeclKind::PostfixOperator, DC, OperatorLoc, Name, NameLoc,
6542
- DesignatedNominalTypeName, DesignatedNominalTypeNameLoc ) {}
6535
+ Identifiers, IdentifierLocs ) {}
6543
6536
6544
6537
PostfixOperatorDecl (DeclContext *DC, SourceLoc OperatorLoc, Identifier Name,
6545
- SourceLoc NameLoc, NominalTypeDecl *DesignatedNominalType)
6538
+ SourceLoc NameLoc,
6539
+ ArrayRef<NominalTypeDecl *> designatedNominalTypes)
6546
6540
: OperatorDecl(DeclKind::PostfixOperator, DC, OperatorLoc, Name, NameLoc,
6547
- DesignatedNominalType ) {}
6541
+ designatedNominalTypes ) {}
6548
6542
6549
6543
SourceRange getSourceRange () const {
6550
6544
return { getOperatorLoc (), getNameLoc () };
0 commit comments