1
0
mirror of https://github.com/dart-lang/sdk synced 2024-07-08 12:06:26 +00:00

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>
This commit is contained in:
Erik Ernst 2024-03-20 17:10:53 +00:00 committed by Commit Queue
parent eb615fc31b
commit 50ff1c7823
2 changed files with 91 additions and 61 deletions

View File

@ -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 @@ topLevelDefinition
| 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 @@ typeWithParameters
;
classDeclaration
: (classModifiers | mixinClassModifiers)
: AUGMENT? (classModifiers | mixinClassModifiers)
CLASS typeWithParameters superclass? interfaces?
LBRACE (metadata classMemberDeclaration)* RBRACE
| classModifiers MIXIN? CLASS mixinApplicationClass
@ -420,7 +421,7 @@ interfaces
;
classMemberDeclaration
: methodSignature functionBody
: AUGMENT? methodSignature functionBody
| declaration ';'
;
@ -429,7 +430,7 @@ mixinApplicationClass
;
mixinDeclaration
: BASE? MIXIN typeIdentifier typeParameters?
: AUGMENT? BASE? MIXIN typeWithParameters
(ON typeNotVoidNotFunctionList)? interfaces?
LBRACE (metadata mixinMemberDeclaration)* RBRACE
;
@ -440,9 +441,8 @@ mixinMemberDeclaration
;
extensionTypeDeclaration
: EXTENSION TYPE CONST? typeWithParameters
representationDeclaration
interfaces?
: AUGMENT? EXTENSION TYPE CONST? typeWithParameters
representationDeclaration interfaces?
LBRACE (metadata extensionTypeMemberDeclaration)* RBRACE
;
@ -457,12 +457,12 @@ extensionTypeMemberDeclaration
;
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 @@ declaration
| (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 @@ mixinApplication
;
enumType
: ENUM typeIdentifier typeParameters? mixins? interfaces? LBRACE
: AUGMENT? ENUM typeWithParameters? mixins? interfaces? LBRACE
enumEntry (',' enumEntry)* (',')?
(';' (metadata classMemberDeclaration)*)?
RBRACE
@ -1360,7 +1360,12 @@ assertion
;
libraryName
: metadata LIBRARY dottedIdentifierList? ';'
: metadata libraryNameBody ';'
;
libraryNameBody
: LIBRARY dottedIdentifierList?
| AUGMENT LIBRARY uri
;
dottedIdentifierList
@ -1369,6 +1374,7 @@ dottedIdentifierList
importOrExport
: libraryImport
| libraryAugmentImport
| libraryExport
;
@ -1376,6 +1382,10 @@ libraryImport
: metadata importSpecification
;
libraryAugmentImport
: metadata IMPORT AUGMENT uri ';'
;
importSpecification
: IMPORT configurableUri (DEFERRED? AS typeIdentifier)? combinator* ';'
;
@ -1487,8 +1497,8 @@ typeNotVoidNotFunctionList
;
typeAlias
: TYPEDEF typeIdentifier typeParameters? '=' type ';'
| TYPEDEF functionTypeAlias
: AUGMENT? TYPEDEF typeIdentifier typeParameters? '=' type ';'
| AUGMENT? TYPEDEF functionTypeAlias
;
functionTypeAlias
@ -1647,6 +1657,7 @@ builtInIdentifier
otherIdentifierNotType
: ASYNC
| AUGMENT
| BASE
| HIDE
| OF
@ -1931,6 +1942,10 @@ ASYNC
: 'async'
;
AUGMENT
: 'augment'
;
BASE
: 'base'
;

View File

@ -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 @@ topLevelDefinition
| 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 @@ typeWithParameters
;
classDeclaration
: (classModifiers | mixinClassModifiers)
: AUGMENT? (classModifiers | mixinClassModifiers)
CLASS typeWithParameters superclass? interfaces?
LBRACE (metadata classMemberDeclaration)* RBRACE
| classModifiers MIXIN? CLASS mixinApplicationClass
@ -426,7 +427,7 @@ interfaces
;
classMemberDeclaration
: methodSignature functionBody
: AUGMENT? methodSignature functionBody
| declaration ';'
;
@ -435,7 +436,7 @@ mixinApplicationClass
;
mixinDeclaration
: BASE? MIXIN typeIdentifier typeParameters?
: AUGMENT? BASE? MIXIN typeWithParameters
(ON typeNotVoidNotFunctionList)? interfaces?
LBRACE (metadata mixinMemberDeclaration)* RBRACE
;
@ -446,9 +447,8 @@ mixinMemberDeclaration
;
extensionTypeDeclaration
: EXTENSION TYPE CONST? typeWithParameters
representationDeclaration
interfaces?
: AUGMENT? EXTENSION TYPE CONST? typeWithParameters
representationDeclaration interfaces?
LBRACE (metadata extensionTypeMemberDeclaration)* RBRACE
;
@ -463,12 +463,12 @@ extensionTypeMemberDeclaration
;
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 @@ declaration
| (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 @@ mixinApplication
;
enumType
: ENUM typeIdentifier typeParameters? mixins? interfaces? LBRACE
: AUGMENT? ENUM typeWithParameters mixins? interfaces? LBRACE
enumEntry (',' enumEntry)* (',')?
(';' (metadata classMemberDeclaration)*)?
RBRACE
@ -1366,7 +1366,12 @@ assertion
;
libraryName
: metadata LIBRARY dottedIdentifierList? ';'
: metadata libraryNameBody ';'
;
libraryNameBody
: LIBRARY dottedIdentifierList?
| AUGMENT LIBRARY uri
;
dottedIdentifierList
@ -1375,6 +1380,7 @@ dottedIdentifierList
importOrExport
: libraryImport
| libraryAugmentImport
| libraryExport
;
@ -1382,6 +1388,10 @@ libraryImport
: metadata importSpecification
;
libraryAugmentImport
: metadata IMPORT AUGMENT uri ';'
;
importSpecification
: IMPORT configurableUri (DEFERRED? AS typeIdentifier)? combinator* ';'
;
@ -1493,8 +1503,8 @@ typeNotVoidNotFunctionList
;
typeAlias
: TYPEDEF typeIdentifier typeParameters? '=' type ';'
| TYPEDEF functionTypeAlias
: AUGMENT? TYPEDEF typeWithParameters '=' type ';'
| AUGMENT? TYPEDEF functionTypeAlias
;
functionTypeAlias
@ -1653,6 +1663,7 @@ builtInIdentifier
otherIdentifierNotType
: ASYNC
| AUGMENT
| BASE
| HIDE
| OF
@ -1937,6 +1948,10 @@ ASYNC
: 'async'
;
AUGMENT
: 'augment'
;
BASE
: 'base'
;
@ -2217,4 +2232,4 @@ FEFF
WS
: (' ' | '\t' | '\r' | '\n')+
{ skip(); }
;
;