Version 2.17.0-236.0.dev

Merge commit '2d884f89ed86652c55a80f1e00ad8bbc7c552263' into 'dev'
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 5d15fdd..911bfcd 100644
--- a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
@@ -9772,6 +9772,17 @@
     correctionMessage: r"""Try replacing '?.' with '.'""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeSuperParameterInitializerOutsideConstructor =
+    messageSuperParameterInitializerOutsideConstructor;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageSuperParameterInitializerOutsideConstructor =
+    const MessageCode("SuperParameterInitializerOutsideConstructor",
+        problemMessage:
+            r"""Super-initializer formal parameters can only be used in generative constructors.""",
+        correctionMessage: r"""Try removing 'super.'.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)>
     templateSuperclassHasNoConstructor =
     const Template<Message Function(String name)>(
diff --git a/pkg/analysis_server/lib/src/domain_diagnostic.dart b/pkg/analysis_server/lib/src/domain_diagnostic.dart
index 117bec4..22cf45c 100644
--- a/pkg/analysis_server/lib/src/domain_diagnostic.dart
+++ b/pkg/analysis_server/lib/src/domain_diagnostic.dart
@@ -6,6 +6,7 @@
 import 'package:analysis_server/protocol/protocol_constants.dart';
 import 'package:analysis_server/protocol/protocol_generated.dart';
 import 'package:analysis_server/src/analysis_server.dart';
+import 'package:analysis_server/src/handler/legacy/diagnostic_get_server_port.dart';
 import 'package:analysis_server/src/utilities/progress.dart';
 import 'package:analyzer/src/dart/analysis/driver.dart';
 
@@ -33,18 +34,6 @@
         knownFileCount - explicitFileCount, driver.numberOfFilesToAnalyze, []);
   }
 
-  /// Answer the `diagnostic.getServerPort` request.
-  Future handleGetServerPort(Request request) async {
-    try {
-      // Open a port (or return the existing one).
-      var port = await server.diagnosticServer!.getServerPort();
-      server.sendResponse(
-          DiagnosticGetServerPortResult(port).toResponse(request.id));
-    } catch (error) {
-      server.sendResponse(Response.debugPortCouldNotBeOpened(request, error));
-    }
-  }
-
   @override
   Response? handleRequest(
       Request request, CancellationToken cancellationToken) {
@@ -53,7 +42,8 @@
       if (requestName == DIAGNOSTIC_REQUEST_GET_DIAGNOSTICS) {
         return computeDiagnostics(request);
       } else if (requestName == DIAGNOSTIC_REQUEST_GET_SERVER_PORT) {
-        handleGetServerPort(request);
+        DiagnosticGetServerPortHandler(server, request, cancellationToken)
+            .handle();
         return Response.DELAYED_RESPONSE;
       }
     } on RequestFailure catch (exception) {
diff --git a/pkg/analysis_server/lib/src/domain_server.dart b/pkg/analysis_server/lib/src/domain_server.dart
index 54efa9a..d51b88c5 100644
--- a/pkg/analysis_server/lib/src/domain_server.dart
+++ b/pkg/analysis_server/lib/src/domain_server.dart
@@ -6,6 +6,7 @@
 import 'package:analysis_server/protocol/protocol_constants.dart';
 import 'package:analysis_server/protocol/protocol_generated.dart';
 import 'package:analysis_server/src/analysis_server.dart';
+import 'package:analysis_server/src/handler/legacy/server_shutdown.dart';
 import 'package:analysis_server/src/utilities/progress.dart';
 
 /// Instances of the class [ServerDomainHandler] implement a [RequestHandler]
@@ -42,7 +43,7 @@
       } else if (requestName == SERVER_REQUEST_SET_SUBSCRIPTIONS) {
         return setSubscriptions(request);
       } else if (requestName == SERVER_REQUEST_SHUTDOWN) {
-        shutdown(request);
+        ServerShutdownHandler(server, request, cancellationToken).handle();
         return Response.DELAYED_RESPONSE;
       } else if (requestName == SERVER_REQUEST_CANCEL_REQUEST) {
         return cancelRequest(request);
@@ -65,11 +66,4 @@
 
     return ServerSetSubscriptionsResult().toResponse(request.id);
   }
-
-  /// Cleanly shutdown the analysis server.
-  Future<void> shutdown(Request request) async {
-    await server.shutdown();
-    var response = ServerShutdownResult().toResponse(request.id);
-    server.sendResponse(response);
-  }
 }
diff --git a/pkg/analysis_server/lib/src/handler/legacy/diagnostic_get_server_port.dart b/pkg/analysis_server/lib/src/handler/legacy/diagnostic_get_server_port.dart
new file mode 100644
index 0000000..e76abac
--- /dev/null
+++ b/pkg/analysis_server/lib/src/handler/legacy/diagnostic_get_server_port.dart
@@ -0,0 +1,31 @@
+// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+
+import 'package:analysis_server/protocol/protocol.dart';
+import 'package:analysis_server/protocol/protocol_generated.dart';
+import 'package:analysis_server/src/analysis_server.dart';
+import 'package:analysis_server/src/handler/legacy/legacy_handler.dart';
+import 'package:analysis_server/src/utilities/progress.dart';
+
+/// The handler for the `diagnostic.getServerPort` request.
+class DiagnosticGetServerPortHandler extends LegacyHandler {
+  /// Initialize a newly created handler to be able to service requests for the
+  /// [server].
+  DiagnosticGetServerPortHandler(AnalysisServer server, Request request,
+      CancellationToken cancellationToken)
+      : super(server, request, cancellationToken);
+
+  @override
+  Future<void> handle() async {
+    try {
+      // Open a port (or return the existing one).
+      var port = await server.diagnosticServer!.getServerPort();
+      sendResult(DiagnosticGetServerPortResult(port));
+    } catch (error) {
+      sendResponse(Response.debugPortCouldNotBeOpened(request, error));
+    }
+  }
+}
diff --git a/pkg/analysis_server/lib/src/handler/legacy/server_shutdown.dart b/pkg/analysis_server/lib/src/handler/legacy/server_shutdown.dart
new file mode 100644
index 0000000..93689a6
--- /dev/null
+++ b/pkg/analysis_server/lib/src/handler/legacy/server_shutdown.dart
@@ -0,0 +1,26 @@
+// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+
+import 'package:analysis_server/protocol/protocol.dart';
+import 'package:analysis_server/protocol/protocol_generated.dart';
+import 'package:analysis_server/src/analysis_server.dart';
+import 'package:analysis_server/src/handler/legacy/legacy_handler.dart';
+import 'package:analysis_server/src/utilities/progress.dart';
+
+/// The handler for the `server.shutdown` request.
+class ServerShutdownHandler extends LegacyHandler {
+  /// Initialize a newly created handler to be able to service requests for the
+  /// [server].
+  ServerShutdownHandler(AnalysisServer server, Request request,
+      CancellationToken cancellationToken)
+      : super(server, request, cancellationToken);
+
+  @override
+  Future<void> handle() async {
+    await server.shutdown();
+    sendResult(ServerShutdownResult());
+  }
+}
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index 12c2c40..305edab 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -4352,6 +4352,15 @@
         thisKeyword = null;
       }
     }
+    if (superKeyword != null) {
+      if (!inConstructor) {
+        handleRecoverableError(
+            fasta.messageSuperParameterInitializerOutsideConstructor,
+            superKeyword,
+            superKeyword);
+        superKeyword = null;
+      }
+    }
     Object? nameNode = pop();
     TypeBuilder? type = pop() as TypeBuilder?;
     if (functionNestingLevel == 0 && type != null) {
diff --git a/pkg/front_end/messages.status b/pkg/front_end/messages.status
index 485fc15..5441a86 100644
--- a/pkg/front_end/messages.status
+++ b/pkg/front_end/messages.status
@@ -809,6 +809,8 @@
 SuperAsExpression/example: Fail
 SuperAsIdentifier/example: Fail
 SuperNullAware/example: Fail
+SuperParameterInitializerOutsideConstructor/analyzerCode: Fail
+SuperParameterInitializerOutsideConstructor/example: Fail
 SuperclassHasNoDefaultConstructor/example: Fail
 SuperclassHasNoGetter/example: Fail
 SuperclassHasNoMember/example: Fail
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index 2c06a23..d952722a 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -1754,6 +1754,10 @@
   script:
     - "class C { void m(this.x); }"
 
+SuperParameterInitializerOutsideConstructor:
+  problemMessage: "Super-initializer formal parameters can only be used in generative constructors."
+  correctionMessage: "Try removing 'super.'."
+
 RedirectionTargetNotFound:
   problemMessage: "Redirection constructor target not found: '#name'"
   analyzerCode: REDIRECT_TO_MISSING_CONSTRUCTOR
diff --git a/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart b/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart
new file mode 100644
index 0000000..929cace
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart
@@ -0,0 +1,20 @@
+// Copyright (c) 2022, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class A {
+  A(int x);
+}
+
+class B extends A {
+  B() : super(42);
+  factory B.foo(super.x) => new B();
+}
+
+foo(super.x) {}
+
+class C {
+  void set foo(super.value) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.strong.expect b/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.strong.expect
new file mode 100644
index 0000000..10e8f10
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.strong.expect
@@ -0,0 +1,42 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart:11:17: Error: Super-initializer formal parameters can only be used in generative constructors.
+// Try removing 'super.'.
+//   factory B.foo(super.x) => new B();
+//                 ^^^^^
+//
+// pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart:14:5: Error: Super-initializer formal parameters can only be used in generative constructors.
+// Try removing 'super.'.
+// foo(super.x) {}
+//     ^^^^^
+//
+// pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart:17:16: Error: Super-initializer formal parameters can only be used in generative constructors.
+// Try removing 'super.'.
+//   void set foo(super.value) {}
+//                ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  constructor •(core::int x) → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •() → self::B
+    : super self::A::•(42)
+    ;
+  static factory foo(dynamic x) → self::B
+    return new self::B::•();
+}
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  set foo(dynamic value) → void {}
+}
+static method foo(dynamic x) → dynamic {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.strong.transformed.expect b/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.strong.transformed.expect
new file mode 100644
index 0000000..10e8f10
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.strong.transformed.expect
@@ -0,0 +1,42 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart:11:17: Error: Super-initializer formal parameters can only be used in generative constructors.
+// Try removing 'super.'.
+//   factory B.foo(super.x) => new B();
+//                 ^^^^^
+//
+// pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart:14:5: Error: Super-initializer formal parameters can only be used in generative constructors.
+// Try removing 'super.'.
+// foo(super.x) {}
+//     ^^^^^
+//
+// pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart:17:16: Error: Super-initializer formal parameters can only be used in generative constructors.
+// Try removing 'super.'.
+//   void set foo(super.value) {}
+//                ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  constructor •(core::int x) → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •() → self::B
+    : super self::A::•(42)
+    ;
+  static factory foo(dynamic x) → self::B
+    return new self::B::•();
+}
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  set foo(dynamic value) → void {}
+}
+static method foo(dynamic x) → dynamic {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.textual_outline.expect b/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.textual_outline.expect
new file mode 100644
index 0000000..a3a7ee1
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.textual_outline.expect
@@ -0,0 +1,16 @@
+class A {
+  A(int x);
+}
+
+class B extends A {
+  B() : super(42);
+  factory B.foo(super.x) => new B();
+}
+
+foo(super.x) {}
+
+class C {
+  void set foo(super.value) {}
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..cac06dc
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.textual_outline_modelled.expect
@@ -0,0 +1,15 @@
+class A {
+  A(int x);
+}
+
+class B extends A {
+  B() : super(42);
+  factory B.foo(super.x) => new B();
+}
+
+class C {
+  void set foo(super.value) {}
+}
+
+foo(super.x) {}
+main() {}
diff --git a/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.weak.expect b/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.weak.expect
new file mode 100644
index 0000000..10e8f10
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.weak.expect
@@ -0,0 +1,42 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart:11:17: Error: Super-initializer formal parameters can only be used in generative constructors.
+// Try removing 'super.'.
+//   factory B.foo(super.x) => new B();
+//                 ^^^^^
+//
+// pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart:14:5: Error: Super-initializer formal parameters can only be used in generative constructors.
+// Try removing 'super.'.
+// foo(super.x) {}
+//     ^^^^^
+//
+// pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart:17:16: Error: Super-initializer formal parameters can only be used in generative constructors.
+// Try removing 'super.'.
+//   void set foo(super.value) {}
+//                ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  constructor •(core::int x) → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •() → self::B
+    : super self::A::•(42)
+    ;
+  static factory foo(dynamic x) → self::B
+    return new self::B::•();
+}
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  set foo(dynamic value) → void {}
+}
+static method foo(dynamic x) → dynamic {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.weak.modular.expect b/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.weak.modular.expect
new file mode 100644
index 0000000..10e8f10
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.weak.modular.expect
@@ -0,0 +1,42 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart:11:17: Error: Super-initializer formal parameters can only be used in generative constructors.
+// Try removing 'super.'.
+//   factory B.foo(super.x) => new B();
+//                 ^^^^^
+//
+// pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart:14:5: Error: Super-initializer formal parameters can only be used in generative constructors.
+// Try removing 'super.'.
+// foo(super.x) {}
+//     ^^^^^
+//
+// pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart:17:16: Error: Super-initializer formal parameters can only be used in generative constructors.
+// Try removing 'super.'.
+//   void set foo(super.value) {}
+//                ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  constructor •(core::int x) → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •() → self::B
+    : super self::A::•(42)
+    ;
+  static factory foo(dynamic x) → self::B
+    return new self::B::•();
+}
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  set foo(dynamic value) → void {}
+}
+static method foo(dynamic x) → dynamic {}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.weak.outline.expect b/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.weak.outline.expect
new file mode 100644
index 0000000..c86aa1b
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.weak.outline.expect
@@ -0,0 +1,24 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  constructor •(core::int x) → self::A
+    ;
+}
+class B extends self::A {
+  constructor •() → self::B
+    ;
+  static factory foo(dynamic x) → self::B
+    ;
+}
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    ;
+  set foo(dynamic value) → void
+    ;
+}
+static method foo(dynamic x) → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.weak.transformed.expect b/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.weak.transformed.expect
new file mode 100644
index 0000000..10e8f10
--- /dev/null
+++ b/pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart.weak.transformed.expect
@@ -0,0 +1,42 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart:11:17: Error: Super-initializer formal parameters can only be used in generative constructors.
+// Try removing 'super.'.
+//   factory B.foo(super.x) => new B();
+//                 ^^^^^
+//
+// pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart:14:5: Error: Super-initializer formal parameters can only be used in generative constructors.
+// Try removing 'super.'.
+// foo(super.x) {}
+//     ^^^^^
+//
+// pkg/front_end/testcases/super_parameters/super_parameters_outside_constructor.dart:17:16: Error: Super-initializer formal parameters can only be used in generative constructors.
+// Try removing 'super.'.
+//   void set foo(super.value) {}
+//                ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  constructor •(core::int x) → self::A
+    : super core::Object::•()
+    ;
+}
+class B extends self::A {
+  constructor •() → self::B
+    : super self::A::•(42)
+    ;
+  static factory foo(dynamic x) → self::B
+    return new self::B::•();
+}
+class C extends core::Object {
+  synthetic constructor •() → self::C
+    : super core::Object::•()
+    ;
+  set foo(dynamic value) → void {}
+}
+static method foo(dynamic x) → dynamic {}
+static method main() → dynamic {}
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 9c49a86..7b71456 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -192,6 +192,9 @@
   buffer->Printf("%.*s", static_cast<int>(len), &name[start_pos]);
 }
 
+// Used to define setters and getters for untagged object fields that are
+// defined with the WSR_COMPRESSED_POINTER_FIELD macro. See
+// PRECOMPILER_WSR_FIELD_DECLARATION in object.h for more information.
 #if defined(DART_PRECOMPILER)
 #define PRECOMPILER_WSR_FIELD_DEFINITION(Class, Type, Name)                    \
   Type##Ptr Class::Name() const {                                              \
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index b1c471e..607d88d 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -887,6 +887,18 @@
   DISALLOW_COPY_AND_ASSIGN(Object);
 };
 
+// Used to declare setters and getters for untagged object fields that are
+// defined with the WSR_COMPRESSED_POINTER_FIELD macro.
+//
+// In the precompiler, the getter transparently unwraps the
+// WeakSerializationReference, if present, to get the wrapped value of the
+// appropriate type, since a WeakSerializationReference object should be
+// transparent to the parts of the precompiler that are not the serializer.
+// Meanwhile, the setter takes an Object to allow the precompiler to set the
+// field to a WeakSerializationReference.
+//
+// Since WeakSerializationReferences are only used during precompilation,
+// this macro creates the normally expected getter and setter otherwise.
 #if defined(DART_PRECOMPILER)
 #define PRECOMPILER_WSR_FIELD_DECLARATION(Type, Name)                          \
   Type##Ptr Name() const;                                                      \
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h
index 98c4e48..1ba2094 100644
--- a/runtime/vm/raw_object.h
+++ b/runtime/vm/raw_object.h
@@ -911,6 +911,15 @@
  protected:                                                                    \
   Compressed##type name##_;
 
+// Used to define untagged object fields that can have values wrapped in
+// WeakSerializationReferences. Since WeakSerializationReferences are only used
+// during precompilation, these fields have type CompressedObjectPtr in the
+// precompiler and the normally expected type otherwise.
+//
+// Fields that are defined with WSR_COMPRESSED_POINTER_FIELD should have
+// getters and setters that are declared in object.h with
+// PRECOMPILER_WSR_FIELD_DECLARATION and defined in object.cc with
+// PRECOMPILER_WSR_FIELD_DEFINITION.
 #if defined(DART_PRECOMPILER)
 #define WSR_COMPRESSED_POINTER_FIELD(Type, Name)                               \
   COMPRESSED_POINTER_FIELD(ObjectPtr, Name)
diff --git a/tools/VERSION b/tools/VERSION
index 006ee29..2e53ff5 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 17
 PATCH 0
-PRERELEASE 235
+PRERELEASE 236
 PRERELEASE_PATCH 0
\ No newline at end of file