diff --git a/tools/spec_parser/Dart.g b/tools/spec_parser/Dart.g index 7551dc97bb8..70c4f846386 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 @@ 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' ; diff --git a/tools/spec_parser/dart_spec_parser/Dart.g4 b/tools/spec_parser/dart_spec_parser/Dart.g4 index ac8b3031c78..36b52832556 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 @@ 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(); } - ; \ No newline at end of file + ;