From d06e6956e81518260473ffc2dfdb58dcaf93db6a Mon Sep 17 00:00:00 2001 From: Erik Ernst Date: Mon, 10 Nov 2025 00:30:12 -0800 Subject: [PATCH] Update spec parser rules about primary constructors This CL changes Dart.g and Dart.g4 such that the spec parser will parse primary constructors using a simpler and clearer set of rules. In particular, the body part of a primary constructor has been given its own signature (`primaryConstructorBodySignature`), which makes it easier to denote the constructs which are used along with primary constructors, and it also supports a more comprehensible AST structure. Change-Id: I7c211ecd76596927a044bdedc5dec3a7eaf9a8b5 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/460420 Reviewed-by: Chloe Stefantsova Commit-Queue: Erik Ernst --- tools/spec_parser/Dart.g | 36 ++++++++++------------ tools/spec_parser/dart_spec_parser/Dart.g4 | 36 ++++++++++------------ 2 files changed, 34 insertions(+), 38 deletions(-) diff --git a/tools/spec_parser/Dart.g b/tools/spec_parser/Dart.g index ca4c9152086..6c7e5ecc298 100644 --- a/tools/spec_parser/Dart.g +++ b/tools/spec_parser/Dart.g @@ -485,7 +485,7 @@ mixinDeclaration ; extensionTypeDeclaration - : EXTENSION TYPE classNameMaybePrimary interfaces? extensionTypeBody + : EXTENSION TYPE primaryConstructor interfaces? extensionTypeBody | AUGMENT EXTENSION TYPE typeWithParameters interfaces? extensionTypeBody ; @@ -512,6 +512,7 @@ methodSignature | STATIC? setterSignature | operatorSignature | constructorSignature + | primaryConstructorBodySignature ; declaration @@ -533,6 +534,7 @@ declaration | redirectingFactoryConstructorSignature | constantConstructorSignature (redirection | initializers)? | constructorSignature (redirection | initializers)? + | primaryConstructorBodySignature ; operatorSignature @@ -566,15 +568,6 @@ setterSignature constructorSignature : constructorName formalParameterList // Old form. | constructorHead formalParameterList // New form. - | declaringConstructorSignature - ; - -declaringConstructorSignature - : THIS identifier? declaringParameterList? // New form only. - ; - -declaringConstantConstructorSignature - : CONST THIS identifier? declaringParameterList // New form only. ; declaringParameterList @@ -637,6 +630,10 @@ constructorName : typeIdentifier ('.' identifierOrNew)? ; +constructorTwoPartName + : typeIdentifier '.' identifierOrNew + ; + constructorHead : NEW identifier? ; @@ -677,21 +674,22 @@ initializerExpression ; factoryConstructorSignature - : CONST? FACTORY constructorName formalParameterList // Old form. - | CONST? factoryConstructorHead formalParameterList // New form. + : CONST? FACTORY constructorTwoPartName + formalParameterList // Old form. + | CONST? factoryConstructorHead + formalParameterList // New form. ; redirectingFactoryConstructorSignature - : CONST? FACTORY constructorName formalParameterList '=' - constructorDesignation // Old form. - | CONST? factoryConstructorHead formalParameterList '=' - constructorDesignation // New form. + : factoryConstructorSignature '=' constructorDesignation + ; + +primaryConstructorBodySignature + : THIS initializers? ; constantConstructorSignature - : CONST constructorName formalParameterList // Old form. - | CONST constructorHead formalParameterList // New form. - | declaringConstantConstructorSignature + : CONST constructorSignature ; mixinApplication diff --git a/tools/spec_parser/dart_spec_parser/Dart.g4 b/tools/spec_parser/dart_spec_parser/Dart.g4 index 09b10323fab..dafbb95817e 100644 --- a/tools/spec_parser/dart_spec_parser/Dart.g4 +++ b/tools/spec_parser/dart_spec_parser/Dart.g4 @@ -495,7 +495,7 @@ mixinDeclaration ; extensionTypeDeclaration - : EXTENSION TYPE classNameMaybePrimary interfaces? extensionTypeBody + : EXTENSION TYPE primaryConstructor interfaces? extensionTypeBody | AUGMENT EXTENSION TYPE typeWithParameters interfaces? extensionTypeBody ; @@ -522,6 +522,7 @@ methodSignature | STATIC? setterSignature | operatorSignature | constructorSignature + | primaryConstructorBodySignature ; declaration @@ -543,6 +544,7 @@ declaration | redirectingFactoryConstructorSignature | constantConstructorSignature (redirection | initializers)? | constructorSignature (redirection | initializers)? + | primaryConstructorBodySignature ; operatorSignature @@ -576,15 +578,6 @@ setterSignature constructorSignature : constructorName formalParameterList // Old form. | constructorHead formalParameterList // New form. - | declaringConstructorSignature - ; - -declaringConstructorSignature - : THIS identifier? declaringParameterList? // New form only. - ; - -declaringConstantConstructorSignature - : CONST THIS identifier? declaringParameterList // New form only. ; declaringParameterList @@ -647,6 +640,10 @@ constructorName : typeIdentifier ('.' identifierOrNew)? ; +constructorTwoPartName + : typeIdentifier '.' identifierOrNew + ; + constructorHead : NEW identifier? ; @@ -687,21 +684,22 @@ initializerExpression ; factoryConstructorSignature - : CONST? FACTORY constructorName formalParameterList // Old form. - | CONST? factoryConstructorHead formalParameterList // New form. + : CONST? FACTORY constructorTwoPartName + formalParameterList // Old form. + | CONST? factoryConstructorHead + formalParameterList // New form. ; redirectingFactoryConstructorSignature - : CONST? FACTORY constructorName formalParameterList '=' - constructorDesignation // Old form. - | CONST? factoryConstructorHead formalParameterList '=' - constructorDesignation // New form. + : factoryConstructorSignature '=' constructorDesignation + ; + +primaryConstructorBodySignature + : THIS initializers? ; constantConstructorSignature - : CONST constructorName formalParameterList // Old form. - | CONST constructorHead formalParameterList // New form. - | declaringConstantConstructorSignature + : CONST constructorSignature ; mixinApplication