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