@@ -502,6 +502,12 @@ extension Parser {
502
502
var members : Array < Member > = [ ]
503
503
try parseCCCMembers ( into: & members)
504
504
505
+ // Make sure we have at least one semantic member.
506
+ if members. none ( \. isSemantic) {
507
+ throw Source . LocatedError (
508
+ ParseError . expectedCustomCharacterClassMembers, start. location)
509
+ }
510
+
505
511
// If we have a binary set operator, parse it and the next members. Note
506
512
// that this means we left associate for a chain of operators.
507
513
// TODO: We may want to diagnose and require users to disambiguate, at least
@@ -511,16 +517,12 @@ extension Parser {
511
517
var rhs : Array < Member > = [ ]
512
518
try parseCCCMembers ( into: & rhs)
513
519
514
- if members . none ( \ . isSemantic ) || rhs. none ( \. isSemantic) {
520
+ if rhs. none ( \. isSemantic) {
515
521
throw Source . LocatedError (
516
522
ParseError . expectedCustomCharacterClassMembers, start. location)
517
523
}
518
524
members = [ . setOperation( members, binOp, rhs) ]
519
525
}
520
- if members. none ( \. isSemantic) {
521
- throw Source . LocatedError (
522
- ParseError . expectedCustomCharacterClassMembers, start. location)
523
- }
524
526
try source. expect ( " ] " )
525
527
return CustomCC ( start, members, loc ( start. location. start) )
526
528
}
0 commit comments