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: // CHANGES:
// //
// v0.40 Include support for augmentation libraries.
//
// v0.39 Include latest changes to mixin related class modifiers. // v0.39 Include latest changes to mixin related class modifiers.
// //
// v0.38 Broaden `initializerExpression` to match implemented behavior. // v0.38 Broaden `initializerExpression` to match implemented behavior.
@ -266,13 +268,12 @@ topLevelDefinition
| EXTERNAL getterSignature ';' | EXTERNAL getterSignature ';'
| EXTERNAL setterSignature ';' | EXTERNAL setterSignature ';'
| EXTERNAL finalVarOrType identifierList ';' | EXTERNAL finalVarOrType identifierList ';'
| getterSignature functionBody | AUGMENT? getterSignature functionBody
| setterSignature functionBody | AUGMENT? setterSignature functionBody
| functionSignature functionBody | AUGMENT? functionSignature functionBody
| (FINAL | CONST) type? staticFinalDeclarationList ';' | AUGMENT? (FINAL | CONST) type? staticFinalDeclarationList ';'
| LATE FINAL type? initializedIdentifierList ';' | AUGMENT? LATE FINAL type? initializedIdentifierList ';'
| LATE? varOrType identifier ('=' expression)? | AUGMENT? LATE? varOrType initializedIdentifierList ';'
(',' initializedIdentifier)* ';'
; ;
declaredIdentifier declaredIdentifier
@ -391,7 +392,7 @@ typeWithParameters
; ;
classDeclaration classDeclaration
: (classModifiers | mixinClassModifiers) : AUGMENT? (classModifiers | mixinClassModifiers)
CLASS typeWithParameters superclass? interfaces? CLASS typeWithParameters superclass? interfaces?
LBRACE (metadata classMemberDeclaration)* RBRACE LBRACE (metadata classMemberDeclaration)* RBRACE
| classModifiers MIXIN? CLASS mixinApplicationClass | classModifiers MIXIN? CLASS mixinApplicationClass
@ -420,7 +421,7 @@ interfaces
; ;
classMemberDeclaration classMemberDeclaration
: methodSignature functionBody : AUGMENT? methodSignature functionBody
| declaration ';' | declaration ';'
; ;
@ -429,7 +430,7 @@ mixinApplicationClass
; ;
mixinDeclaration mixinDeclaration
: BASE? MIXIN typeIdentifier typeParameters? : AUGMENT? BASE? MIXIN typeWithParameters
(ON typeNotVoidNotFunctionList)? interfaces? (ON typeNotVoidNotFunctionList)? interfaces?
LBRACE (metadata mixinMemberDeclaration)* RBRACE LBRACE (metadata mixinMemberDeclaration)* RBRACE
; ;
@ -440,9 +441,8 @@ mixinMemberDeclaration
; ;
extensionTypeDeclaration extensionTypeDeclaration
: EXTENSION TYPE CONST? typeWithParameters : AUGMENT? EXTENSION TYPE CONST? typeWithParameters
representationDeclaration representationDeclaration interfaces?
interfaces?
LBRACE (metadata extensionTypeMemberDeclaration)* RBRACE LBRACE (metadata extensionTypeMemberDeclaration)* RBRACE
; ;
@ -457,12 +457,12 @@ extensionTypeMemberDeclaration
; ;
extensionDeclaration extensionDeclaration
: EXTENSION typeIdentifierNotType? typeParameters? ON type : AUGMENT? EXTENSION typeIdentifierNotType? typeParameters? ON type
LBRACE (metadata extensionMemberDefinition)* RBRACE LBRACE (metadata extensionMemberDeclaration)* RBRACE
; ;
// TODO: We might want to make this more strict. // TODO: We might want to make this more strict.
extensionMemberDefinition extensionMemberDeclaration
: classMemberDeclaration : classMemberDeclaration
; ;
@ -484,17 +484,17 @@ declaration
| (EXTERNAL STATIC?)? setterSignature | (EXTERNAL STATIC?)? setterSignature
| (EXTERNAL STATIC?)? functionSignature | (EXTERNAL STATIC?)? functionSignature
| EXTERNAL (STATIC? finalVarOrType | COVARIANT varOrType) identifierList | EXTERNAL (STATIC? finalVarOrType | COVARIANT varOrType) identifierList
| ABSTRACT (finalVarOrType | COVARIANT varOrType) identifierList
| EXTERNAL? operatorSignature | EXTERNAL? operatorSignature
| STATIC (FINAL | CONST) type? staticFinalDeclarationList | ABSTRACT (finalVarOrType | COVARIANT varOrType) identifierList
| STATIC LATE FINAL type? initializedIdentifierList | AUGMENT? STATIC (FINAL | CONST) type? staticFinalDeclarationList
| STATIC LATE? varOrType initializedIdentifierList | AUGMENT? STATIC LATE FINAL type? initializedIdentifierList
| COVARIANT LATE FINAL type? identifierList | AUGMENT? STATIC LATE? varOrType initializedIdentifierList
| COVARIANT LATE? varOrType initializedIdentifierList | AUGMENT? COVARIANT LATE FINAL type? identifierList
| LATE? (FINAL type? | varOrType) initializedIdentifierList | AUGMENT? COVARIANT LATE? varOrType initializedIdentifierList
| redirectingFactoryConstructorSignature | AUGMENT? LATE? (FINAL type? | varOrType) initializedIdentifierList
| constantConstructorSignature (redirection | initializers)? | AUGMENT? redirectingFactoryConstructorSignature
| constructorSignature (redirection | initializers)? | AUGMENT? constantConstructorSignature (redirection | initializers)?
| AUGMENT? constructorSignature (redirection | initializers)?
; ;
staticFinalDeclarationList staticFinalDeclarationList
@ -591,7 +591,7 @@ mixinApplication
; ;
enumType enumType
: ENUM typeIdentifier typeParameters? mixins? interfaces? LBRACE : AUGMENT? ENUM typeWithParameters? mixins? interfaces? LBRACE
enumEntry (',' enumEntry)* (',')? enumEntry (',' enumEntry)* (',')?
(';' (metadata classMemberDeclaration)*)? (';' (metadata classMemberDeclaration)*)?
RBRACE RBRACE
@ -1360,7 +1360,12 @@ assertion
; ;
libraryName libraryName
: metadata LIBRARY dottedIdentifierList? ';' : metadata libraryNameBody ';'
;
libraryNameBody
: LIBRARY dottedIdentifierList?
| AUGMENT LIBRARY uri
; ;
dottedIdentifierList dottedIdentifierList
@ -1369,6 +1374,7 @@ dottedIdentifierList
importOrExport importOrExport
: libraryImport : libraryImport
| libraryAugmentImport
| libraryExport | libraryExport
; ;
@ -1376,6 +1382,10 @@ libraryImport
: metadata importSpecification : metadata importSpecification
; ;
libraryAugmentImport
: metadata IMPORT AUGMENT uri ';'
;
importSpecification importSpecification
: IMPORT configurableUri (DEFERRED? AS typeIdentifier)? combinator* ';' : IMPORT configurableUri (DEFERRED? AS typeIdentifier)? combinator* ';'
; ;
@ -1487,8 +1497,8 @@ typeNotVoidNotFunctionList
; ;
typeAlias typeAlias
: TYPEDEF typeIdentifier typeParameters? '=' type ';' : AUGMENT? TYPEDEF typeIdentifier typeParameters? '=' type ';'
| TYPEDEF functionTypeAlias | AUGMENT? TYPEDEF functionTypeAlias
; ;
functionTypeAlias functionTypeAlias
@ -1647,6 +1657,7 @@ builtInIdentifier
otherIdentifierNotType otherIdentifierNotType
: ASYNC : ASYNC
| AUGMENT
| BASE | BASE
| HIDE | HIDE
| OF | OF
@ -1931,6 +1942,10 @@ ASYNC
: 'async' : 'async'
; ;
AUGMENT
: 'augment'
;
BASE BASE
: 'base' : 'base'
; ;

View file

@ -4,6 +4,8 @@
// CHANGES: // CHANGES:
// //
// v0.41 Include support for augmentation libraries.
//
// v0.40 Include latest changes to mixin related class modifiers. // v0.40 Include latest changes to mixin related class modifiers.
// //
// v0.39 Translate actions from Java to Dart. // v0.39 Translate actions from Java to Dart.
@ -272,13 +274,12 @@ topLevelDefinition
| EXTERNAL getterSignature ';' | EXTERNAL getterSignature ';'
| EXTERNAL setterSignature ';' | EXTERNAL setterSignature ';'
| EXTERNAL finalVarOrType identifierList ';' | EXTERNAL finalVarOrType identifierList ';'
| getterSignature functionBody | AUGMENT? getterSignature functionBody
| setterSignature functionBody | AUGMENT? setterSignature functionBody
| functionSignature functionBody | AUGMENT? functionSignature functionBody
| (FINAL | CONST) type? staticFinalDeclarationList ';' | AUGMENT? (FINAL | CONST) type? staticFinalDeclarationList ';'
| LATE FINAL type? initializedIdentifierList ';' | AUGMENT? LATE FINAL type? initializedIdentifierList ';'
| LATE? varOrType identifier ('=' expression)? | AUGMENT? LATE? varOrType initializedIdentifierList ';'
(',' initializedIdentifier)* ';'
; ;
declaredIdentifier declaredIdentifier
@ -397,7 +398,7 @@ typeWithParameters
; ;
classDeclaration classDeclaration
: (classModifiers | mixinClassModifiers) : AUGMENT? (classModifiers | mixinClassModifiers)
CLASS typeWithParameters superclass? interfaces? CLASS typeWithParameters superclass? interfaces?
LBRACE (metadata classMemberDeclaration)* RBRACE LBRACE (metadata classMemberDeclaration)* RBRACE
| classModifiers MIXIN? CLASS mixinApplicationClass | classModifiers MIXIN? CLASS mixinApplicationClass
@ -426,7 +427,7 @@ interfaces
; ;
classMemberDeclaration classMemberDeclaration
: methodSignature functionBody : AUGMENT? methodSignature functionBody
| declaration ';' | declaration ';'
; ;
@ -435,7 +436,7 @@ mixinApplicationClass
; ;
mixinDeclaration mixinDeclaration
: BASE? MIXIN typeIdentifier typeParameters? : AUGMENT? BASE? MIXIN typeWithParameters
(ON typeNotVoidNotFunctionList)? interfaces? (ON typeNotVoidNotFunctionList)? interfaces?
LBRACE (metadata mixinMemberDeclaration)* RBRACE LBRACE (metadata mixinMemberDeclaration)* RBRACE
; ;
@ -446,9 +447,8 @@ mixinMemberDeclaration
; ;
extensionTypeDeclaration extensionTypeDeclaration
: EXTENSION TYPE CONST? typeWithParameters : AUGMENT? EXTENSION TYPE CONST? typeWithParameters
representationDeclaration representationDeclaration interfaces?
interfaces?
LBRACE (metadata extensionTypeMemberDeclaration)* RBRACE LBRACE (metadata extensionTypeMemberDeclaration)* RBRACE
; ;
@ -463,12 +463,12 @@ extensionTypeMemberDeclaration
; ;
extensionDeclaration extensionDeclaration
: EXTENSION typeIdentifierNotType? typeParameters? ON type : AUGMENT? EXTENSION typeIdentifierNotType? typeParameters? ON type
LBRACE (metadata extensionMemberDefinition)* RBRACE LBRACE (metadata extensionMemberDeclaration)* RBRACE
; ;
// TODO: We might want to make this more strict. // TODO: We might want to make this more strict.
extensionMemberDefinition extensionMemberDeclaration
: classMemberDeclaration : classMemberDeclaration
; ;
@ -490,17 +490,17 @@ declaration
| (EXTERNAL STATIC?)? setterSignature | (EXTERNAL STATIC?)? setterSignature
| (EXTERNAL STATIC?)? functionSignature | (EXTERNAL STATIC?)? functionSignature
| EXTERNAL (STATIC? finalVarOrType | COVARIANT varOrType) identifierList | EXTERNAL (STATIC? finalVarOrType | COVARIANT varOrType) identifierList
| ABSTRACT (finalVarOrType | COVARIANT varOrType) identifierList
| EXTERNAL? operatorSignature | EXTERNAL? operatorSignature
| STATIC (FINAL | CONST) type? staticFinalDeclarationList | ABSTRACT (finalVarOrType | COVARIANT varOrType) identifierList
| STATIC LATE FINAL type? initializedIdentifierList | AUGMENT? STATIC (FINAL | CONST) type? staticFinalDeclarationList
| STATIC LATE? varOrType initializedIdentifierList | AUGMENT? STATIC LATE FINAL type? initializedIdentifierList
| COVARIANT LATE FINAL type? identifierList | AUGMENT? STATIC LATE? varOrType initializedIdentifierList
| COVARIANT LATE? varOrType initializedIdentifierList | AUGMENT? COVARIANT LATE FINAL type? identifierList
| LATE? (FINAL type? | varOrType) initializedIdentifierList | AUGMENT? COVARIANT LATE? varOrType initializedIdentifierList
| redirectingFactoryConstructorSignature | AUGMENT? LATE? (FINAL type? | varOrType) initializedIdentifierList
| constantConstructorSignature (redirection | initializers)? | AUGMENT? redirectingFactoryConstructorSignature
| constructorSignature (redirection | initializers)? | AUGMENT? constantConstructorSignature (redirection | initializers)?
| AUGMENT? constructorSignature (redirection | initializers)?
; ;
staticFinalDeclarationList staticFinalDeclarationList
@ -597,7 +597,7 @@ mixinApplication
; ;
enumType enumType
: ENUM typeIdentifier typeParameters? mixins? interfaces? LBRACE : AUGMENT? ENUM typeWithParameters mixins? interfaces? LBRACE
enumEntry (',' enumEntry)* (',')? enumEntry (',' enumEntry)* (',')?
(';' (metadata classMemberDeclaration)*)? (';' (metadata classMemberDeclaration)*)?
RBRACE RBRACE
@ -1366,7 +1366,12 @@ assertion
; ;
libraryName libraryName
: metadata LIBRARY dottedIdentifierList? ';' : metadata libraryNameBody ';'
;
libraryNameBody
: LIBRARY dottedIdentifierList?
| AUGMENT LIBRARY uri
; ;
dottedIdentifierList dottedIdentifierList
@ -1375,6 +1380,7 @@ dottedIdentifierList
importOrExport importOrExport
: libraryImport : libraryImport
| libraryAugmentImport
| libraryExport | libraryExport
; ;
@ -1382,6 +1388,10 @@ libraryImport
: metadata importSpecification : metadata importSpecification
; ;
libraryAugmentImport
: metadata IMPORT AUGMENT uri ';'
;
importSpecification importSpecification
: IMPORT configurableUri (DEFERRED? AS typeIdentifier)? combinator* ';' : IMPORT configurableUri (DEFERRED? AS typeIdentifier)? combinator* ';'
; ;
@ -1493,8 +1503,8 @@ typeNotVoidNotFunctionList
; ;
typeAlias typeAlias
: TYPEDEF typeIdentifier typeParameters? '=' type ';' : AUGMENT? TYPEDEF typeWithParameters '=' type ';'
| TYPEDEF functionTypeAlias | AUGMENT? TYPEDEF functionTypeAlias
; ;
functionTypeAlias functionTypeAlias
@ -1653,6 +1663,7 @@ builtInIdentifier
otherIdentifierNotType otherIdentifierNotType
: ASYNC : ASYNC
| AUGMENT
| BASE | BASE
| HIDE | HIDE
| OF | OF
@ -1937,6 +1948,10 @@ ASYNC
: 'async' : 'async'
; ;
AUGMENT
: 'augment'
;
BASE BASE
: 'base' : 'base'
; ;
@ -2217,4 +2232,4 @@ FEFF
WS WS
: (' ' | '\t' | '\r' | '\n')+ : (' ' | '\t' | '\r' | '\n')+
{ skip(); } { skip(); }
; ;