diff --git a/.packages b/.packages
index b24526d..568fa66 100644
--- a/.packages
+++ b/.packages
@@ -82,7 +82,6 @@
 protobuf:third_party/pkg/protobuf/protobuf/lib
 pub:third_party/pkg/pub/lib
 pub_semver:third_party/pkg/pub_semver/lib
-resource:third_party/pkg/resource/lib
 sdk_library_metadata:sdk/lib/_internal/sdk_library_metadata/lib
 shelf:third_party/pkg/shelf/lib
 shelf_packages_handler:third_party/pkg/shelf_packages_handler/lib
diff --git a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
index bdb8699..b0ff32b 100644
--- a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
@@ -4604,7 +4604,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageFunctionTypedParameterVar = const MessageCode(
     "FunctionTypedParameterVar",
-    analyzerCodes: <String>["FUNCTION_TYPED_PARAMETER_VAR"],
+    index: 119,
     problemMessage:
         r"""Function-typed parameters can't specify 'const', 'final' or 'var' in place of a return type.""",
     correctionMessage: r"""Try replacing the keyword with a return type.""");
@@ -8163,7 +8163,7 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const MessageCode messageOperatorWithTypeParameters = const MessageCode(
     "OperatorWithTypeParameters",
-    analyzerCodes: <String>["TYPE_PARAMETER_ON_OPERATOR"],
+    index: 120,
     problemMessage:
         r"""Types parameters aren't allowed when defining an operator.""",
     correctionMessage: r"""Try removing the type parameters.""");
diff --git a/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart b/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart
index d49a7eb..a855fe1 100644
--- a/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart
+++ b/pkg/analyzer/lib/src/dart/error/syntactic_errors.g.dart
@@ -133,6 +133,8 @@
   ParserErrorCode.LITERAL_WITH_CLASS,
   ParserErrorCode.LITERAL_WITH_NEW,
   ParserErrorCode.CONSTRUCTOR_WITH_TYPE_ARGUMENTS,
+  ParserErrorCode.FUNCTION_TYPED_PARAMETER_VAR,
+  ParserErrorCode.TYPE_PARAMETER_ON_OPERATOR,
 ];
 
 class ParserErrorCode extends ErrorCode {
diff --git a/pkg/analyzer/lib/src/fasta/error_converter.dart b/pkg/analyzer/lib/src/fasta/error_converter.dart
index f207a06..3d8c9c9 100644
--- a/pkg/analyzer/lib/src/fasta/error_converter.dart
+++ b/pkg/analyzer/lib/src/fasta/error_converter.dart
@@ -114,10 +114,6 @@
             length,
             [name]);
         return;
-      case "FUNCTION_TYPED_PARAMETER_VAR":
-        errorReporter?.reportErrorForOffset(
-            ParserErrorCode.FUNCTION_TYPED_PARAMETER_VAR, offset, length);
-        return;
       case "GETTER_WITH_PARAMETERS":
         errorReporter?.reportErrorForOffset(
             ParserErrorCode.GETTER_WITH_PARAMETERS, offset, length);
@@ -275,10 +271,6 @@
             offset,
             length);
         return;
-      case "TYPE_PARAMETER_ON_OPERATOR":
-        errorReporter?.reportErrorForOffset(
-            ParserErrorCode.TYPE_PARAMETER_ON_OPERATOR, offset, length);
-        return;
       case "UNDEFINED_CLASS":
         errorReporter?.reportErrorForOffset(
             CompileTimeErrorCode.UNDEFINED_CLASS, offset, length);
diff --git a/pkg/analyzer/messages.yaml b/pkg/analyzer/messages.yaml
index ed7de6a..aa8e577 100644
--- a/pkg/analyzer/messages.yaml
+++ b/pkg/analyzer/messages.yaml
@@ -17468,9 +17468,6 @@
   FINAL_TYPEDEF:
     problemMessage: "Typedefs can't be declared to be 'final'."
     correctionMessage: "Try removing the keyword 'final'."
-  FUNCTION_TYPED_PARAMETER_VAR:
-    problemMessage: "Function-typed parameters can't specify 'const', 'final' or 'var' in place of a return type."
-    correctionMessage: Try replacing the keyword with a return type.
   GETTER_IN_FUNCTION:
     problemMessage: "Getters can't be defined within methods or functions."
     correctionMessage: Try moving the getter outside the method or function, or converting the getter to a function.
@@ -17628,12 +17625,6 @@
   STATIC_TOP_LEVEL_DECLARATION:
     problemMessage: "Top-level declarations can't be declared to be static."
     correctionMessage: "Try removing the keyword 'static'."
-  TYPE_PARAMETER_ON_OPERATOR:
-    problemMessage: "Types parameters aren't allowed when defining an operator."
-    correctionMessage: Try removing the type parameters.
-    comment: |-
-      7.1.1 Operators: Type parameters are not syntactically supported on an
-      operator.
   UNEXPECTED_TERMINATOR_FOR_PARAMETER_GROUP:
     problemMessage: "There is no '{0}' to open a parameter group."
     correctionMessage: "Try inserting the '{0}' at the appropriate location."
diff --git a/pkg/analyzer_plugin/test/utilities/range_factory_test.dart b/pkg/analyzer_plugin/test/utilities/range_factory_test.dart
index 78b64cb..e3ffd03 100644
--- a/pkg/analyzer_plugin/test/utilities/range_factory_test.dart
+++ b/pkg/analyzer_plugin/test/utilities/range_factory_test.dart
@@ -13,12 +13,175 @@
 
 void main() {
   defineReflectiveSuite(() {
+    defineReflectiveTests(RangeFactory_ArgumentRangeTest);
+    defineReflectiveTests(RangeFactory_NodeInListTest);
     defineReflectiveTests(RangeFactoryTest);
   });
 }
 
 @reflectiveTest
-class RangeFactoryTest extends AbstractSingleUnitTest {
+class RangeFactory_ArgumentRangeTest extends AbstractSingleUnitTest {
+  Future<void> test_all_mixed_noTrailingComma() async {
+    await resolveTestCode('''
+void f() {
+  g(0, 1, c: 2);
+}
+void g(int a, int b, {int? c}) {}
+''');
+    _assertArgumentRange(0, 2, SourceRange(15, 10), SourceRange(15, 10));
+  }
+
+  Future<void> test_all_mixed_trailingComma() async {
+    await resolveTestCode('''
+void f() {
+  g(0, 1, c: 2, );
+}
+void g(int a, int b, {int? c}) {}
+''');
+    _assertArgumentRange(0, 2, SourceRange(15, 12), SourceRange(15, 10));
+  }
+
+  Future<void> test_all_named_noTrailingComma() async {
+    await resolveTestCode('''
+void f() {
+  g(a: 0, b: 1, c: 2);
+}
+void g({int? a, int? b, int? c}) {}
+''');
+    _assertArgumentRange(0, 2, SourceRange(15, 16), SourceRange(15, 16));
+  }
+
+  Future<void> test_all_named_trailingComma() async {
+    await resolveTestCode('''
+void f() {
+  g(a: 0, b: 1, c: 2, );
+}
+void g({int? a, int? b, int? c}) {}
+''');
+    _assertArgumentRange(0, 2, SourceRange(15, 18), SourceRange(15, 16));
+  }
+
+  Future<void> test_all_positional_noTrailingComma() async {
+    await resolveTestCode('''
+void f() {
+  g(0, 1, 2);
+}
+void g(int a, int b, int c) {}
+''');
+    _assertArgumentRange(0, 2, SourceRange(15, 7), SourceRange(15, 7));
+  }
+
+  Future<void> test_all_positional_trailingComma() async {
+    await resolveTestCode('''
+void f() {
+  g(0, 1, 2, );
+}
+void g(int a, int b, int c) {}
+''');
+    _assertArgumentRange(0, 2, SourceRange(15, 9), SourceRange(15, 7));
+  }
+
+  Future<void> test_first_noTrailingComma() async {
+    await resolveTestCode('''
+void f() {
+  g(0, 1);
+}
+void g(int a, int b) {}
+''');
+    _assertArgumentRange(0, 0, SourceRange(15, 3), SourceRange(15, 1));
+  }
+
+  Future<void> test_first_trailingComma() async {
+    await resolveTestCode('''
+void f() {
+  g(0, 1, );
+}
+void g(int a, int b) {}
+''');
+    _assertArgumentRange(0, 0, SourceRange(15, 3), SourceRange(15, 1));
+  }
+
+  Future<void> test_last_noTrailingComma() async {
+    await resolveTestCode('''
+void f() {
+  g(0, 1);
+}
+void g(int a, int b) {}
+''');
+    _assertArgumentRange(1, 1, SourceRange(16, 3), SourceRange(18, 1));
+  }
+
+  Future<void> test_last_trailingComma() async {
+    await resolveTestCode('''
+void f() {
+  g(0, 1, );
+}
+void g(int a, int b) {}
+''');
+    _assertArgumentRange(1, 1, SourceRange(16, 3), SourceRange(18, 1));
+  }
+
+  Future<void> test_middle_noTrailingComma() async {
+    await resolveTestCode('''
+void f() {
+  g(0, 1, 2, 3);
+}
+void g(int a, int b, int c, int d) {}
+''');
+    _assertArgumentRange(1, 2, SourceRange(16, 6), SourceRange(18, 4));
+  }
+
+  Future<void> test_middle_trailingComma() async {
+    await resolveTestCode('''
+void f() {
+  g(0, 1, 2, 3, );
+}
+void g(int a, int b, int c, int d) {}
+''');
+    _assertArgumentRange(1, 2, SourceRange(16, 6), SourceRange(18, 4));
+  }
+
+  Future<void> test_only_named() async {
+    await resolveTestCode('''
+void f() {
+  g(a: 0);
+}
+void g({int? a}) {}
+''');
+    _assertArgumentRange(0, 0, SourceRange(15, 4), SourceRange(15, 4));
+  }
+
+  Future<void> test_only_positional() async {
+    await resolveTestCode('''
+void f() {
+  g(0);
+}
+void g(int a) {}
+''');
+    _assertArgumentRange(0, 0, SourceRange(15, 1), SourceRange(15, 1));
+  }
+
+  /// Assuming that the test code starts with a function whose block body starts
+  /// with a method invocation, compute the range for the arguments in the
+  /// invocation's argument list between [lower] and [upper]. Validate that the
+  /// range for deletion matches [expectedForDeletion] and that the range not
+  /// for deletion matches [expectedNoDeletion].
+  void _assertArgumentRange(int lower, int upper,
+      SourceRange expectedForDeletion, SourceRange expectedNoDeletion) {
+    var f = testUnit.declarations[0] as FunctionDeclaration;
+    var body = f.functionExpression.body as BlockFunctionBody;
+    var statement = body.block.statements[0] as ExpressionStatement;
+    var invocation = statement.expression as MethodInvocation;
+    var argumentList = invocation.argumentList;
+    expect(range.argumentRange(argumentList, lower, upper, true),
+        expectedForDeletion);
+    expect(range.argumentRange(argumentList, lower, upper, false),
+        expectedNoDeletion);
+  }
+}
+
+@reflectiveTest
+class RangeFactory_NodeInListTest extends AbstractSingleUnitTest {
   /// Assuming that the test code starts with a function whose block body starts
   /// with a method invocation, return the list of arguments in that invocation.
   NodeList<Expression> get _argumentList {
@@ -29,146 +192,119 @@
     return invocation.argumentList.arguments;
   }
 
-  Future<void> test_argumentRange_all_mixed_noTrailingComma() async {
+  Future<void> test_argumentList_first_named() async {
     await resolveTestCode('''
 void f() {
-  g(0, 1, c: 2);
+  g(a: 1, b: 2);
 }
-void g(int a, int b, {int? c}) {}
+void g({int? a, int? b}) {}
 ''');
-    _assertArgumentRange(0, 2, SourceRange(15, 10), SourceRange(15, 10));
+    var list = _argumentList;
+    expect(range.nodeInList(list, list[0]), SourceRange(15, 6));
   }
 
-  Future<void> test_argumentRange_all_mixed_trailingComma() async {
+  Future<void> test_argumentList_first_positional() async {
     await resolveTestCode('''
 void f() {
-  g(0, 1, c: 2, );
+  g(1, 2);
 }
-void g(int a, int b, {int? c}) {}
+void g(int a, int b) {}
 ''');
-    _assertArgumentRange(0, 2, SourceRange(15, 12), SourceRange(15, 10));
+    var list = _argumentList;
+    expect(range.nodeInList(list, list[0]), SourceRange(15, 3));
   }
 
-  Future<void> test_argumentRange_all_named_noTrailingComma() async {
+  Future<void> test_argumentList_last_named() async {
     await resolveTestCode('''
 void f() {
-  g(a: 0, b: 1, c: 2);
+  g(a: 1, b: 2);
+}
+void g({int? a, int? b}) {}
+''');
+    var list = _argumentList;
+    expect(range.nodeInList(list, list[1]), SourceRange(19, 6));
+  }
+
+  Future<void> test_argumentList_last_positional() async {
+    await resolveTestCode('''
+void f() {
+  g(1, 2);
+}
+void g(int a, int b) {}
+''');
+    var list = _argumentList;
+    expect(range.nodeInList(list, list[1]), SourceRange(16, 3));
+  }
+
+  Future<void> test_argumentList_middle_named() async {
+    await resolveTestCode('''
+void f() {
+  g(a: 1, b: 2, c: 3);
 }
 void g({int? a, int? b, int? c}) {}
 ''');
-    _assertArgumentRange(0, 2, SourceRange(15, 16), SourceRange(15, 16));
+    var list = _argumentList;
+    expect(range.nodeInList(list, list[1]), SourceRange(19, 6));
   }
 
-  Future<void> test_argumentRange_all_named_trailingComma() async {
+  Future<void> test_argumentList_middle_positional() async {
     await resolveTestCode('''
 void f() {
-  g(a: 0, b: 1, c: 2, );
-}
-void g({int? a, int? b, int? c}) {}
-''');
-    _assertArgumentRange(0, 2, SourceRange(15, 18), SourceRange(15, 16));
-  }
-
-  Future<void> test_argumentRange_all_positional_noTrailingComma() async {
-    await resolveTestCode('''
-void f() {
-  g(0, 1, 2);
+  g(1, 2, 3);
 }
 void g(int a, int b, int c) {}
 ''');
-    _assertArgumentRange(0, 2, SourceRange(15, 7), SourceRange(15, 7));
+    var list = _argumentList;
+    expect(range.nodeInList(list, list[1]), SourceRange(16, 3));
   }
 
-  Future<void> test_argumentRange_all_positional_trailingComma() async {
+  Future<void> test_argumentList_only_named() async {
     await resolveTestCode('''
 void f() {
-  g(0, 1, 2, );
-}
-void g(int a, int b, int c) {}
-''');
-    _assertArgumentRange(0, 2, SourceRange(15, 9), SourceRange(15, 7));
-  }
-
-  Future<void> test_argumentRange_first_noTrailingComma() async {
-    await resolveTestCode('''
-void f() {
-  g(0, 1);
-}
-void g(int a, int b) {}
-''');
-    _assertArgumentRange(0, 0, SourceRange(15, 3), SourceRange(15, 1));
-  }
-
-  Future<void> test_argumentRange_first_trailingComma() async {
-    await resolveTestCode('''
-void f() {
-  g(0, 1, );
-}
-void g(int a, int b) {}
-''');
-    _assertArgumentRange(0, 0, SourceRange(15, 3), SourceRange(15, 1));
-  }
-
-  Future<void> test_argumentRange_last_noTrailingComma() async {
-    await resolveTestCode('''
-void f() {
-  g(0, 1);
-}
-void g(int a, int b) {}
-''');
-    _assertArgumentRange(1, 1, SourceRange(16, 3), SourceRange(18, 1));
-  }
-
-  Future<void> test_argumentRange_last_trailingComma() async {
-    await resolveTestCode('''
-void f() {
-  g(0, 1, );
-}
-void g(int a, int b) {}
-''');
-    _assertArgumentRange(1, 1, SourceRange(16, 3), SourceRange(18, 1));
-  }
-
-  Future<void> test_argumentRange_middle_noTrailingComma() async {
-    await resolveTestCode('''
-void f() {
-  g(0, 1, 2, 3);
-}
-void g(int a, int b, int c, int d) {}
-''');
-    _assertArgumentRange(1, 2, SourceRange(16, 6), SourceRange(18, 4));
-  }
-
-  Future<void> test_argumentRange_middle_trailingComma() async {
-    await resolveTestCode('''
-void f() {
-  g(0, 1, 2, 3, );
-}
-void g(int a, int b, int c, int d) {}
-''');
-    _assertArgumentRange(1, 2, SourceRange(16, 6), SourceRange(18, 4));
-  }
-
-  Future<void> test_argumentRange_only_named() async {
-    await resolveTestCode('''
-void f() {
-  g(a: 0);
+  g(a: 1);
 }
 void g({int? a}) {}
 ''');
-    _assertArgumentRange(0, 0, SourceRange(15, 4), SourceRange(15, 4));
+    var list = _argumentList;
+    expect(range.nodeInList(list, list[0]), SourceRange(15, 4));
   }
 
-  Future<void> test_argumentRange_only_positional() async {
+  Future<void> test_argumentList_only_named_trailingComma() async {
     await resolveTestCode('''
 void f() {
-  g(0);
+  g(a: 1,);
+}
+void g({int? a}) {}
+''');
+    var list = _argumentList;
+    expect(range.nodeInList(list, list[0]), SourceRange(15, 5));
+  }
+
+  Future<void> test_argumentList_only_positional() async {
+    await resolveTestCode('''
+void f() {
+  g(1);
 }
 void g(int a) {}
 ''');
-    _assertArgumentRange(0, 0, SourceRange(15, 1), SourceRange(15, 1));
+    var list = _argumentList;
+    expect(range.nodeInList(list, list[0]), SourceRange(15, 1));
   }
 
+  Future<void> test_argumentList_only_positional_trailingComma() async {
+    await resolveTestCode('''
+void f() {
+  g(1,);
+}
+void g(int a) {}
+''');
+    var list = _argumentList;
+    expect(range.nodeInList(list, list[0]), SourceRange(15, 2));
+  }
+}
+
+@reflectiveTest
+class RangeFactoryTest extends AbstractSingleUnitTest {
   Future<void> test_elementName() async {
     await resolveTestCode('class ABC {}');
     var element = findElement.class_('ABC');
@@ -215,117 +351,6 @@
     expect(range.node(mainName), SourceRange(0, 4));
   }
 
-  Future<void> test_nodeInList_argumentList_first_named() async {
-    await resolveTestCode('''
-void f() {
-  g(a: 1, b: 2);
-}
-void g({int? a, int? b}) {}
-''');
-    var list = _argumentList;
-    expect(range.nodeInList(list, list[0]), SourceRange(15, 6));
-  }
-
-  Future<void> test_nodeInList_argumentList_first_positional() async {
-    await resolveTestCode('''
-void f() {
-  g(1, 2);
-}
-void g(int a, int b) {}
-''');
-    var list = _argumentList;
-    expect(range.nodeInList(list, list[0]), SourceRange(15, 3));
-  }
-
-  Future<void> test_nodeInList_argumentList_last_named() async {
-    await resolveTestCode('''
-void f() {
-  g(a: 1, b: 2);
-}
-void g({int? a, int? b}) {}
-''');
-    var list = _argumentList;
-    expect(range.nodeInList(list, list[1]), SourceRange(19, 6));
-  }
-
-  Future<void> test_nodeInList_argumentList_last_positional() async {
-    await resolveTestCode('''
-void f() {
-  g(1, 2);
-}
-void g(int a, int b) {}
-''');
-    var list = _argumentList;
-    expect(range.nodeInList(list, list[1]), SourceRange(16, 3));
-  }
-
-  Future<void> test_nodeInList_argumentList_middle_named() async {
-    await resolveTestCode('''
-void f() {
-  g(a: 1, b: 2, c: 3);
-}
-void g({int? a, int? b, int? c}) {}
-''');
-    var list = _argumentList;
-    expect(range.nodeInList(list, list[1]), SourceRange(19, 6));
-  }
-
-  Future<void> test_nodeInList_argumentList_middle_positional() async {
-    await resolveTestCode('''
-void f() {
-  g(1, 2, 3);
-}
-void g(int a, int b, int c) {}
-''');
-    var list = _argumentList;
-    expect(range.nodeInList(list, list[1]), SourceRange(16, 3));
-  }
-
-  Future<void> test_nodeInList_argumentList_only_named() async {
-    await resolveTestCode('''
-void f() {
-  g(a: 1);
-}
-void g({int? a}) {}
-''');
-    var list = _argumentList;
-    expect(range.nodeInList(list, list[0]), SourceRange(15, 4));
-  }
-
-  Future<void> test_nodeInList_argumentList_only_named_trailingComma() async {
-    await resolveTestCode('''
-void f() {
-  g(a: 1,);
-}
-void g({int? a}) {}
-''');
-    var list = _argumentList;
-    expect(range.nodeInList(list, list[0]), SourceRange(15, 5));
-  }
-
-  Future<void> test_nodeInList_argumentList_only_positional() async {
-    await resolveTestCode('''
-void f() {
-  g(1);
-}
-void g(int a) {}
-''');
-    var list = _argumentList;
-    expect(range.nodeInList(list, list[0]), SourceRange(15, 1));
-  }
-
-  Future<void>
-      test_nodeInList_argumentList_only_positional_trailingComma() async {
-    await resolveTestCode('''
-void f() {
-  g(1,);
-}
-void g(int a) {}
-''');
-    var list = _argumentList;
-    expect(range.nodeInList(list, list[0]), SourceRange(15, 2));
-  }
-
   Future<void> test_nodes() async {
     await resolveTestCode(' main() {}');
     var mainFunction = testUnit.declarations[0] as FunctionDeclaration;
@@ -376,22 +401,4 @@
     var mainName = mainFunction.name;
     expect(range.token(mainName.beginToken), SourceRange(1, 4));
   }
-
-  /// Assuming that the test code starts with a function whose block body starts
-  /// with a method invocation, compute the range for the arguments in the
-  /// invocation's argument list between [lower] and [upper]. Validate that the
-  /// range for deletion matches [expectedForDeletion] and that the range not
-  /// for deletion matches [expectedNoDeletion].
-  void _assertArgumentRange(int lower, int upper,
-      SourceRange expectedForDeletion, SourceRange expectedNoDeletion) {
-    var f = testUnit.declarations[0] as FunctionDeclaration;
-    var body = f.functionExpression.body as BlockFunctionBody;
-    var statement = body.block.statements[0] as ExpressionStatement;
-    var invocation = statement.expression as MethodInvocation;
-    var argumentList = invocation.argumentList;
-    expect(range.argumentRange(argumentList, lower, upper, true),
-        expectedForDeletion);
-    expect(range.argumentRange(argumentList, lower, upper, false),
-        expectedNoDeletion);
-  }
 }
diff --git a/pkg/dev_compiler/lib/src/kernel/compiler.dart b/pkg/dev_compiler/lib/src/kernel/compiler.dart
index f55ce1a..ca5860b 100644
--- a/pkg/dev_compiler/lib/src/kernel/compiler.dart
+++ b/pkg/dev_compiler/lib/src/kernel/compiler.dart
@@ -4803,21 +4803,33 @@
     /// list and the element type is known to be invariant so it can skip the
     /// type check.
     bool isNativeListInvariantAdd(InvocationExpression node) {
-      Expression receiver;
-      if (receiver != null && node.name.text == 'add') {
+      if (node is InstanceInvocation &&
+          node.isInvariant &&
+          node.name.text == 'add') {
         // The call to add is marked as invariant, so the type check on the
         // parameter to add is not needed.
+        var receiver = node.receiver;
         if (receiver is VariableGet &&
             receiver.variable.isFinal &&
             !receiver.variable.isLate) {
           // The receiver is a final variable, so it only contains the
           // initializer value. Also, avoid late variables in case the CFE
           // lowering of late variables is changed in the future.
-          if (receiver.variable.initializer is ListLiteral) {
+          var initializer = receiver.variable.initializer;
+          if (initializer is ListLiteral) {
             // The initializer is a list literal, so we know the list can be
             // grown, modified, and is represented by a JavaScript Array.
             return true;
           }
+          if (initializer is StaticInvocation &&
+              initializer.target.enclosingClass == _coreTypes.listClass &&
+              initializer.target.name.text == 'of' &&
+              initializer.arguments.named.isEmpty) {
+            // The initializer is a `List.of()` call from the dart:core library
+            // and the growable named argument has not been passed (it defaults
+            // to true).
+            return true;
+          }
         }
       }
       return false;
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index 4ed6af7..bebd92b 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -601,9 +601,10 @@
     - "class C { static f; }"
 
 FunctionTypedParameterVar:
+  index: 119
   problemMessage: "Function-typed parameters can't specify 'const', 'final' or 'var' in place of a return type."
   correctionMessage: "Try replacing the keyword with a return type."
-  analyzerCode: FUNCTION_TYPED_PARAMETER_VAR
+  analyzerCode: ParserErrorCode.FUNCTION_TYPED_PARAMETER_VAR
   script:
     - "void f(const x()) {}"
     - "void f(final x()) {}"
@@ -2742,9 +2743,13 @@
   problemMessage: "An operator can't have optional parameters."
 
 OperatorWithTypeParameters:
+  index: 120
   problemMessage: "Types parameters aren't allowed when defining an operator."
   correctionMessage: "Try removing the type parameters."
-  analyzerCode: TYPE_PARAMETER_ON_OPERATOR
+  analyzerCode: ParserErrorCode.TYPE_PARAMETER_ON_OPERATOR
+  comment: |-
+    7.1.1 Operators: Type parameters are not syntactically supported on an
+    operator.
   script:
     - "class C { operator []<T>(T t) => null; }"
 
@@ -5414,4 +5419,4 @@
   problemMessage: "'new' can only be used as a constructor reference."
   experiments: constructor-tearoffs
   script: |
-    method(dynamic d) => d.new;
\ No newline at end of file
+    method(dynamic d) => d.new;
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/enum_from_lib_used_as_type.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/enum_from_lib_used_as_type.dart.expect
index 8ddda11..ef7f8ee 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/enum_from_lib_used_as_type.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/enum_from_lib_used_as_type.dart.expect
@@ -22,6 +22,6 @@
   synthetic constructor •() → self::Class
     : super core::Object::•()
     ;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3261,getterSelectorId:3262]  method method([@vm.inferred-type.metadata=dart.core::Null? (value: null)] self::Enum e) → core::int
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3266,getterSelectorId:3267]  method method([@vm.inferred-type.metadata=dart.core::Null? (value: null)] self::Enum e) → core::int
     return [@vm.inferred-type.metadata=!] e.{core::_Enum::index}{core::int};
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_enum_from_lib.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_enum_from_lib.dart.expect
index 64e1bc1..4a68920 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_enum_from_lib.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/tree_shake_enum_from_lib.dart.expect
@@ -51,6 +51,6 @@
   synthetic constructor •() → self::ConstClass
     : super core::Object::•()
     ;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3265,getterSelectorId:3266]  method method([@vm.inferred-type.metadata=dart.core::Null? (value: null)] self::ConstEnum e) → core::int
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3270,getterSelectorId:3271]  method method([@vm.inferred-type.metadata=dart.core::Null? (value: null)] self::ConstEnum e) → core::int
     return [@vm.inferred-type.metadata=!] e.{core::_Enum::index}{core::int};
 }
diff --git a/sdk/lib/_internal/vm/bin/socket_patch.dart b/sdk/lib/_internal/vm/bin/socket_patch.dart
index 9a68d6f..5f0379e 100644
--- a/sdk/lib/_internal/vm/bin/socket_patch.dart
+++ b/sdk/lib/_internal/vm/bin/socket_patch.dart
@@ -2545,7 +2545,9 @@
 
 @pragma("vm:entry-point")
 class _ResourceHandleImpl implements ResourceHandle {
+  @pragma("vm:entry-point")
   int _handle; // file descriptor on linux
+  @pragma("vm:entry-point")
   _ResourceHandleImpl(this._handle);
 
   @pragma("vm:external-name", "ResourceHandleImpl_toFile")
@@ -2572,6 +2574,7 @@
   @pragma("vm:external-name", "ResourceHandleImpl_toRawDatagramSocket")
   external RawDatagramSocket toRawDatagramSocket();
 
+  @pragma("vm:entry-point")
   static final _ResourceHandleImpl _sentinel = _ResourceHandleImpl(-1);
 }
 
@@ -2581,11 +2584,16 @@
       native "SocketControlMessage_fromHandles";
 }
 
+@pragma("vm:entry-point")
 class _SocketControlMessageImpl implements SocketControlMessage {
+  @pragma("vm:entry-point")
   final int level;
+  @pragma("vm:entry-point")
   final int type;
+  @pragma("vm:entry-point")
   final Uint8List data;
 
+  @pragma("vm:entry-point")
   _SocketControlMessageImpl(this.level, this.type, this.data);
 
   @pragma("vm:external-name", "SocketControlMessageImpl_extractHandles")
diff --git a/sdk/lib/io/file_impl.dart b/sdk/lib/io/file_impl.dart
index 1311444..b8361d0 100644
--- a/sdk/lib/io/file_impl.dart
+++ b/sdk/lib/io/file_impl.dart
@@ -662,6 +662,7 @@
   lock(int lock, int start, int end);
 }
 
+@pragma("vm:entry-point")
 class _RandomAccessFile implements RandomAccessFile {
   static bool _connectedResourceHandler = false;
 
@@ -672,6 +673,7 @@
   late _FileResourceInfo _resourceInfo;
   _RandomAccessFileOps _ops;
 
+  @pragma("vm:entry-point")
   _RandomAccessFile(int pointer, this.path)
       : _ops = new _RandomAccessFileOps(pointer) {
     _resourceInfo = new _FileResourceInfo(this);
diff --git a/tests/standalone/io/unix_socket_test.dart b/tests/standalone/io/unix_socket_test.dart
index f87a4e5..a8bf0cb 100644
--- a/tests/standalone/io/unix_socket_test.dart
+++ b/tests/standalone/io/unix_socket_test.dart
@@ -697,6 +697,7 @@
           final receivedSocket = handles[0].toRawSocket();
           receivedSocket.write('Hello, server!\n'.codeUnits);
           socket.write('server replied'.codeUnits);
+          receivedSocket.close();
           break;
         case RawSocketEvent.readClosed:
           socket.close();
diff --git a/tests/standalone_2/io/unix_socket_test.dart b/tests/standalone_2/io/unix_socket_test.dart
index 98b27a5..04e8cb2 100644
--- a/tests/standalone_2/io/unix_socket_test.dart
+++ b/tests/standalone_2/io/unix_socket_test.dart
@@ -693,6 +693,7 @@
           final receivedSocket = handles[0].toRawSocket();
           receivedSocket.write('Hello, server!\n'.codeUnits);
           socket.write('server replied'.codeUnits);
+          receivedSocket.close();
           break;
         case RawSocketEvent.readClosed:
           socket.close();
diff --git a/tools/VERSION b/tools/VERSION
index 0510da6..b8395e8 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 15
 PATCH 0
-PRERELEASE 200
+PRERELEASE 201
 PRERELEASE_PATCH 0
\ No newline at end of file
