Change pattern rules (rename extractor->object, add metadata)

This CL changes the spec parser grammar, Dart.g, such that its pattern
related rules correspond to the recent updates in the patterns feature
specification.

Change-Id: I8d07cdb4c7ce22e0625da5bc8224ca2cf57af095
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/268920
Reviewed-by: William Hesse <whesse@google.com>
Auto-Submit: Erik Ernst <eernst@google.com>
Commit-Queue: Erik Ernst <eernst@google.com>
diff --git a/tools/spec_parser/Dart.g b/tools/spec_parser/Dart.g
index 4162bb8..c9de175 100644
--- a/tools/spec_parser/Dart.g
+++ b/tools/spec_parser/Dart.g
@@ -4,6 +4,8 @@
 
 // CHANGES:
 //
+// v0.22 Change pattern rules, following updated feature specification.
+//
 // v0.21 Add support for patterns.
 //
 // v0.20 Adjust record syntax such that () is allowed (denoting the empty
@@ -1043,7 +1045,7 @@
     |    listPattern
     |    mapPattern
     |    recordPattern
-    |    extractorPattern
+    |    objectPattern
     ;
 
 castPattern
@@ -1107,15 +1109,8 @@
     :    (identifier? ':')? pattern
     ;
 
-extractorPattern
-    :    extractorName typeArguments? '(' patternFields? ')'
-    ;
-
-// TODO: Could this be a single case containing `typeName`?
-// I don't think we need `C.new` or `N1.N2.N3` or `N1.N2.new`.
-extractorName
-    :    typeIdentifier
-    |    qualifiedName
+objectPattern
+    :    typeName typeArguments? '(' patternFields? ')'
     ;
 
 patternVariableDeclaration
@@ -1127,7 +1122,7 @@
     |    listPattern
     |    mapPattern
     |    recordPattern
-    |    extractorPattern
+    |    objectPattern
     ;
 
 patternAssignment
@@ -1172,10 +1167,9 @@
     :    expression? ';'
     ;
 
-// TODO: make it `metadata patternVariableDeclaration ';'`?
 localVariableDeclaration
     :    metadata initializedVariableDeclaration ';'
-    |    patternVariableDeclaration ';'
+    |    metadata patternVariableDeclaration ';'
     ;
 
 initializedVariableDeclaration
@@ -1199,7 +1193,7 @@
     :    metadata declaredIdentifier IN expression
     |    metadata identifier IN expression
     |    forInitializerStatement expression? ';' expressionList?
-    |    ('final' | 'var') outerPattern 'in' expression
+    |    metadata (FINAL | VAR) outerPattern IN expression
     ;
 
 // The localVariableDeclaration cannot be CONST, but that can