Skip to content

Commit ad5a1bb

Browse files
eernstgCommit Queue
authored andcommitted
Simplify the grammar to use just memberDeclaration
The spec_parser grammars have previously made a distinction among the different kinds of members that a class, mixin, extension type, etc could have. This is not very useful, though, so this CL changes the grammar such that they all just contain a sequence of general member declarations `<memberDeclaration>`. It is then up to non-parser based error checks to prevent whatever should not exist (e.g., until we add constructors to extensions it is an error to declare a constructor in an `extension`, but this will be an ad-hoc check rather than a syntax error). Change-Id: Ifca2713af86eb3f569732ebef844135b772a5465 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/454280 Reviewed-by: Chloe Stefantsova <[email protected]> Commit-Queue: Erik Ernst <[email protected]>
1 parent 3c26fcf commit ad5a1bb

File tree

2 files changed

+16
-37
lines changed

2 files changed

+16
-37
lines changed

tools/spec_parser/Dart.g

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
// CHANGES:
66
//
7+
// v0.54 Simplify members.
8+
//
79
// v0.53 Support declaring constructors.
810
//
911
// v0.52 Support static access shorthands.
@@ -435,7 +437,7 @@ classNamePart
435437
;
436438

437439
classBody
438-
: LBRACE (metadata classMemberDeclaration)* RBRACE
440+
: LBRACE (metadata memberDeclaration)* RBRACE
439441
| ';'
440442
;
441443

@@ -461,7 +463,7 @@ interfaces
461463
: IMPLEMENTS typeNotVoidNotFunctionList
462464
;
463465

464-
classMemberDeclaration
466+
memberDeclaration
465467
: AUGMENT? methodSignature functionBody
466468
| AUGMENT? declaration ';'
467469
;
@@ -473,11 +475,7 @@ mixinApplicationClass
473475
mixinDeclaration
474476
: AUGMENT? BASE? MIXIN typeWithParameters
475477
(ON typeNotVoidNotFunctionList)? interfaces?
476-
LBRACE (metadata mixinMemberDeclaration)* RBRACE
477-
;
478-
479-
mixinMemberDeclaration
480-
: classMemberDeclaration
478+
LBRACE (metadata memberDeclaration)* RBRACE
481479
;
482480

483481
extensionTypeDeclaration
@@ -487,25 +485,17 @@ extensionTypeDeclaration
487485
;
488486

489487
extensionTypeBody
490-
: LBRACE (metadata extensionTypeMemberDeclaration)* RBRACE
488+
: LBRACE (metadata memberDeclaration)* RBRACE
491489
| ';'
492490
;
493491

494-
extensionTypeMemberDeclaration
495-
: classMemberDeclaration
496-
;
497-
498492
extensionDeclaration
499493
: EXTENSION typeIdentifierNotType? typeParameters? ON type extensionBody
500494
| AUGMENT EXTENSION typeIdentifierNotType typeParameters? extensionBody
501495
;
502496

503497
extensionBody
504-
: LBRACE (metadata extensionMemberDeclaration)* RBRACE
505-
;
506-
507-
extensionMemberDeclaration
508-
: classMemberDeclaration
498+
: LBRACE (metadata memberDeclaration)* RBRACE
509499
;
510500

511501
methodSignature
@@ -697,7 +687,7 @@ mixinApplication
697687
enumType
698688
: AUGMENT? ENUM classNamePart mixins? interfaces? LBRACE
699689
enumEntry (',' enumEntry)* ','?
700-
(';' (metadata classMemberDeclaration)*)?
690+
(';' (metadata memberDeclaration)*)?
701691
RBRACE
702692
;
703693

tools/spec_parser/dart_spec_parser/Dart.g4

Lines changed: 8 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55
// CHANGES:
66
//
7+
// v0.55 Simplify members.
8+
//
79
// v0.54 Support declaring constructors.
810
//
911
// v0.53 Support static access shorthands.
@@ -445,7 +447,7 @@ classNamePart
445447
;
446448

447449
classBody
448-
: LBRACE (metadata classMemberDeclaration)* RBRACE
450+
: LBRACE (metadata memberDeclaration)* RBRACE
449451
| ';'
450452
;
451453

@@ -471,7 +473,7 @@ interfaces
471473
: IMPLEMENTS typeNotVoidNotFunctionList
472474
;
473475

474-
classMemberDeclaration
476+
memberDeclaration
475477
: AUGMENT? methodSignature functionBody
476478
| AUGMENT? declaration ';'
477479
;
@@ -483,11 +485,7 @@ mixinApplicationClass
483485
mixinDeclaration
484486
: AUGMENT? BASE? MIXIN typeWithParameters
485487
(ON typeNotVoidNotFunctionList)? interfaces?
486-
LBRACE (metadata mixinMemberDeclaration)* RBRACE
487-
;
488-
489-
mixinMemberDeclaration
490-
: classMemberDeclaration
488+
LBRACE (metadata memberDeclaration)* RBRACE
491489
;
492490

493491
extensionTypeDeclaration
@@ -497,26 +495,17 @@ extensionTypeDeclaration
497495
;
498496

499497
extensionTypeBody
500-
: LBRACE (metadata extensionTypeMemberDeclaration)* RBRACE
498+
: LBRACE (metadata memberDeclaration)* RBRACE
501499
| ';'
502500
;
503501

504-
extensionTypeMemberDeclaration
505-
: classMemberDeclaration
506-
;
507-
508502
extensionDeclaration
509503
: EXTENSION typeIdentifierNotType? typeParameters? ON type extensionBody
510504
| AUGMENT EXTENSION typeIdentifierNotType typeParameters? extensionBody
511505
;
512506

513507
extensionBody
514-
: LBRACE (metadata extensionMemberDeclaration)* RBRACE
515-
;
516-
517-
// TODO: We might want to make this more strict.
518-
extensionMemberDeclaration
519-
: classMemberDeclaration
508+
: LBRACE (metadata memberDeclaration)* RBRACE
520509
;
521510

522511
methodSignature
@@ -708,7 +697,7 @@ mixinApplication
708697
enumType
709698
: AUGMENT? ENUM classNamePart mixins? interfaces? LBRACE
710699
enumEntry (',' enumEntry)* ','?
711-
(';' (metadata classMemberDeclaration)*)?
700+
(';' (metadata memberDeclaration)*)?
712701
RBRACE
713702
;
714703

0 commit comments

Comments
 (0)