Introduce support for augmentation libraries in Dart.g
Change-Id: Icc4b89f1b25dd633279d87e9d51f85372d962c7b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/358450
Commit-Queue: Erik Ernst <eernst@google.com>
Reviewed-by: William Hesse <whesse@google.com>
diff --git a/tools/spec_parser/Dart.g b/tools/spec_parser/Dart.g
index 7551dc9..70c4f84 100644
--- a/tools/spec_parser/Dart.g
+++ b/tools/spec_parser/Dart.g
@@ -4,6 +4,8 @@
// CHANGES:
//
+// v0.40 Include support for augmentation libraries.
+//
// v0.39 Include latest changes to mixin related class modifiers.
//
// v0.38 Broaden `initializerExpression` to match implemented behavior.
@@ -266,13 +268,12 @@
| EXTERNAL getterSignature ';'
| EXTERNAL setterSignature ';'
| EXTERNAL finalVarOrType identifierList ';'
- | getterSignature functionBody
- | setterSignature functionBody
- | functionSignature functionBody
- | (FINAL | CONST) type? staticFinalDeclarationList ';'
- | LATE FINAL type? initializedIdentifierList ';'
- | LATE? varOrType identifier ('=' expression)?
- (',' initializedIdentifier)* ';'
+ | AUGMENT? getterSignature functionBody
+ | AUGMENT? setterSignature functionBody
+ | AUGMENT? functionSignature functionBody
+ | AUGMENT? (FINAL | CONST) type? staticFinalDeclarationList ';'
+ | AUGMENT? LATE FINAL type? initializedIdentifierList ';'
+ | AUGMENT? LATE? varOrType initializedIdentifierList ';'
;
declaredIdentifier
@@ -391,7 +392,7 @@
;
classDeclaration
- : (classModifiers | mixinClassModifiers)
+ : AUGMENT? (classModifiers | mixinClassModifiers)
CLASS typeWithParameters superclass? interfaces?
LBRACE (metadata classMemberDeclaration)* RBRACE
| classModifiers MIXIN? CLASS mixinApplicationClass
@@ -420,7 +421,7 @@
;
classMemberDeclaration
- : methodSignature functionBody
+ : AUGMENT? methodSignature functionBody
| declaration ';'
;
@@ -429,7 +430,7 @@
;
mixinDeclaration
- : BASE? MIXIN typeIdentifier typeParameters?
+ : AUGMENT? BASE? MIXIN typeWithParameters
(ON typeNotVoidNotFunctionList)? interfaces?
LBRACE (metadata mixinMemberDeclaration)* RBRACE
;
@@ -440,9 +441,8 @@
;
extensionTypeDeclaration
- : EXTENSION TYPE CONST? typeWithParameters
- representationDeclaration
- interfaces?
+ : AUGMENT? EXTENSION TYPE CONST? typeWithParameters
+ representationDeclaration interfaces?
LBRACE (metadata extensionTypeMemberDeclaration)* RBRACE
;
@@ -457,12 +457,12 @@
;
extensionDeclaration
- : EXTENSION typeIdentifierNotType? typeParameters? ON type
- LBRACE (metadata extensionMemberDefinition)* RBRACE
+ : AUGMENT? EXTENSION typeIdentifierNotType? typeParameters? ON type
+ LBRACE (metadata extensionMemberDeclaration)* RBRACE
;
// TODO: We might want to make this more strict.
-extensionMemberDefinition
+extensionMemberDeclaration
: classMemberDeclaration
;
@@ -484,17 +484,17 @@
| (EXTERNAL STATIC?)? setterSignature
| (EXTERNAL STATIC?)? functionSignature
| EXTERNAL (STATIC? finalVarOrType | COVARIANT varOrType) identifierList
- | ABSTRACT (finalVarOrType | COVARIANT varOrType) identifierList
| EXTERNAL? operatorSignature
- | STATIC (FINAL | CONST) type? staticFinalDeclarationList
- | STATIC LATE FINAL type? initializedIdentifierList
- | STATIC LATE? varOrType initializedIdentifierList
- | COVARIANT LATE FINAL type? identifierList
- | COVARIANT LATE? varOrType initializedIdentifierList
- | LATE? (FINAL type? | varOrType) initializedIdentifierList
- | redirectingFactoryConstructorSignature
- | constantConstructorSignature (redirection | initializers)?
- | constructorSignature (redirection | initializers)?
+ | ABSTRACT (finalVarOrType | COVARIANT varOrType) identifierList
+ | AUGMENT? STATIC (FINAL | CONST) type? staticFinalDeclarationList
+ | AUGMENT? STATIC LATE FINAL type? initializedIdentifierList
+ | AUGMENT? STATIC LATE? varOrType initializedIdentifierList
+ | AUGMENT? COVARIANT LATE FINAL type? identifierList
+ | AUGMENT? COVARIANT LATE? varOrType initializedIdentifierList
+ | AUGMENT? LATE? (FINAL type? | varOrType) initializedIdentifierList
+ | AUGMENT? redirectingFactoryConstructorSignature
+ | AUGMENT? constantConstructorSignature (redirection | initializers)?
+ | AUGMENT? constructorSignature (redirection | initializers)?
;
staticFinalDeclarationList
@@ -591,7 +591,7 @@
;
enumType
- : ENUM typeIdentifier typeParameters? mixins? interfaces? LBRACE
+ : AUGMENT? ENUM typeWithParameters? mixins? interfaces? LBRACE
enumEntry (',' enumEntry)* (',')?
(';' (metadata classMemberDeclaration)*)?
RBRACE
@@ -1360,7 +1360,12 @@
;
libraryName
- : metadata LIBRARY dottedIdentifierList? ';'
+ : metadata libraryNameBody ';'
+ ;
+
+libraryNameBody
+ : LIBRARY dottedIdentifierList?
+ | AUGMENT LIBRARY uri
;
dottedIdentifierList
@@ -1369,6 +1374,7 @@
importOrExport
: libraryImport
+ | libraryAugmentImport
| libraryExport
;
@@ -1376,6 +1382,10 @@
: metadata importSpecification
;
+libraryAugmentImport
+ : metadata IMPORT AUGMENT uri ';'
+ ;
+
importSpecification
: IMPORT configurableUri (DEFERRED? AS typeIdentifier)? combinator* ';'
;
@@ -1487,8 +1497,8 @@
;
typeAlias
- : TYPEDEF typeIdentifier typeParameters? '=' type ';'
- | TYPEDEF functionTypeAlias
+ : AUGMENT? TYPEDEF typeIdentifier typeParameters? '=' type ';'
+ | AUGMENT? TYPEDEF functionTypeAlias
;
functionTypeAlias
@@ -1647,6 +1657,7 @@
otherIdentifierNotType
: ASYNC
+ | AUGMENT
| BASE
| HIDE
| OF
@@ -1931,6 +1942,10 @@
: 'async'
;
+AUGMENT
+ : 'augment'
+ ;
+
BASE
: 'base'
;
diff --git a/tools/spec_parser/dart_spec_parser/Dart.g4 b/tools/spec_parser/dart_spec_parser/Dart.g4
index ac8b303..36b5283 100644
--- a/tools/spec_parser/dart_spec_parser/Dart.g4
+++ b/tools/spec_parser/dart_spec_parser/Dart.g4
@@ -4,6 +4,8 @@
// CHANGES:
//
+// v0.41 Include support for augmentation libraries.
+//
// v0.40 Include latest changes to mixin related class modifiers.
//
// v0.39 Translate actions from Java to Dart.
@@ -272,13 +274,12 @@
| EXTERNAL getterSignature ';'
| EXTERNAL setterSignature ';'
| EXTERNAL finalVarOrType identifierList ';'
- | getterSignature functionBody
- | setterSignature functionBody
- | functionSignature functionBody
- | (FINAL | CONST) type? staticFinalDeclarationList ';'
- | LATE FINAL type? initializedIdentifierList ';'
- | LATE? varOrType identifier ('=' expression)?
- (',' initializedIdentifier)* ';'
+ | AUGMENT? getterSignature functionBody
+ | AUGMENT? setterSignature functionBody
+ | AUGMENT? functionSignature functionBody
+ | AUGMENT? (FINAL | CONST) type? staticFinalDeclarationList ';'
+ | AUGMENT? LATE FINAL type? initializedIdentifierList ';'
+ | AUGMENT? LATE? varOrType initializedIdentifierList ';'
;
declaredIdentifier
@@ -397,7 +398,7 @@
;
classDeclaration
- : (classModifiers | mixinClassModifiers)
+ : AUGMENT? (classModifiers | mixinClassModifiers)
CLASS typeWithParameters superclass? interfaces?
LBRACE (metadata classMemberDeclaration)* RBRACE
| classModifiers MIXIN? CLASS mixinApplicationClass
@@ -426,7 +427,7 @@
;
classMemberDeclaration
- : methodSignature functionBody
+ : AUGMENT? methodSignature functionBody
| declaration ';'
;
@@ -435,7 +436,7 @@
;
mixinDeclaration
- : BASE? MIXIN typeIdentifier typeParameters?
+ : AUGMENT? BASE? MIXIN typeWithParameters
(ON typeNotVoidNotFunctionList)? interfaces?
LBRACE (metadata mixinMemberDeclaration)* RBRACE
;
@@ -446,9 +447,8 @@
;
extensionTypeDeclaration
- : EXTENSION TYPE CONST? typeWithParameters
- representationDeclaration
- interfaces?
+ : AUGMENT? EXTENSION TYPE CONST? typeWithParameters
+ representationDeclaration interfaces?
LBRACE (metadata extensionTypeMemberDeclaration)* RBRACE
;
@@ -463,12 +463,12 @@
;
extensionDeclaration
- : EXTENSION typeIdentifierNotType? typeParameters? ON type
- LBRACE (metadata extensionMemberDefinition)* RBRACE
+ : AUGMENT? EXTENSION typeIdentifierNotType? typeParameters? ON type
+ LBRACE (metadata extensionMemberDeclaration)* RBRACE
;
// TODO: We might want to make this more strict.
-extensionMemberDefinition
+extensionMemberDeclaration
: classMemberDeclaration
;
@@ -490,17 +490,17 @@
| (EXTERNAL STATIC?)? setterSignature
| (EXTERNAL STATIC?)? functionSignature
| EXTERNAL (STATIC? finalVarOrType | COVARIANT varOrType) identifierList
- | ABSTRACT (finalVarOrType | COVARIANT varOrType) identifierList
| EXTERNAL? operatorSignature
- | STATIC (FINAL | CONST) type? staticFinalDeclarationList
- | STATIC LATE FINAL type? initializedIdentifierList
- | STATIC LATE? varOrType initializedIdentifierList
- | COVARIANT LATE FINAL type? identifierList
- | COVARIANT LATE? varOrType initializedIdentifierList
- | LATE? (FINAL type? | varOrType) initializedIdentifierList
- | redirectingFactoryConstructorSignature
- | constantConstructorSignature (redirection | initializers)?
- | constructorSignature (redirection | initializers)?
+ | ABSTRACT (finalVarOrType | COVARIANT varOrType) identifierList
+ | AUGMENT? STATIC (FINAL | CONST) type? staticFinalDeclarationList
+ | AUGMENT? STATIC LATE FINAL type? initializedIdentifierList
+ | AUGMENT? STATIC LATE? varOrType initializedIdentifierList
+ | AUGMENT? COVARIANT LATE FINAL type? identifierList
+ | AUGMENT? COVARIANT LATE? varOrType initializedIdentifierList
+ | AUGMENT? LATE? (FINAL type? | varOrType) initializedIdentifierList
+ | AUGMENT? redirectingFactoryConstructorSignature
+ | AUGMENT? constantConstructorSignature (redirection | initializers)?
+ | AUGMENT? constructorSignature (redirection | initializers)?
;
staticFinalDeclarationList
@@ -597,7 +597,7 @@
;
enumType
- : ENUM typeIdentifier typeParameters? mixins? interfaces? LBRACE
+ : AUGMENT? ENUM typeWithParameters mixins? interfaces? LBRACE
enumEntry (',' enumEntry)* (',')?
(';' (metadata classMemberDeclaration)*)?
RBRACE
@@ -1366,7 +1366,12 @@
;
libraryName
- : metadata LIBRARY dottedIdentifierList? ';'
+ : metadata libraryNameBody ';'
+ ;
+
+libraryNameBody
+ : LIBRARY dottedIdentifierList?
+ | AUGMENT LIBRARY uri
;
dottedIdentifierList
@@ -1375,6 +1380,7 @@
importOrExport
: libraryImport
+ | libraryAugmentImport
| libraryExport
;
@@ -1382,6 +1388,10 @@
: metadata importSpecification
;
+libraryAugmentImport
+ : metadata IMPORT AUGMENT uri ';'
+ ;
+
importSpecification
: IMPORT configurableUri (DEFERRED? AS typeIdentifier)? combinator* ';'
;
@@ -1493,8 +1503,8 @@
;
typeAlias
- : TYPEDEF typeIdentifier typeParameters? '=' type ';'
- | TYPEDEF functionTypeAlias
+ : AUGMENT? TYPEDEF typeWithParameters '=' type ';'
+ | AUGMENT? TYPEDEF functionTypeAlias
;
functionTypeAlias
@@ -1653,6 +1663,7 @@
otherIdentifierNotType
: ASYNC
+ | AUGMENT
| BASE
| HIDE
| OF
@@ -1937,6 +1948,10 @@
: 'async'
;
+AUGMENT
+ : 'augment'
+ ;
+
BASE
: 'base'
;
@@ -2217,4 +2232,4 @@
WS
: (' ' | '\t' | '\r' | '\n')+
{ skip(); }
- ;
\ No newline at end of file
+ ;