diff --git a/pkg/front_end/lib/src/base/libraries_specification.dart b/pkg/_fe_analyzer_shared/lib/src/util/libraries_specification.dart
similarity index 98%
rename from pkg/front_end/lib/src/base/libraries_specification.dart
rename to pkg/_fe_analyzer_shared/lib/src/util/libraries_specification.dart
index ad345f4..bbc64f4 100644
--- a/pkg/front_end/lib/src/base/libraries_specification.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/util/libraries_specification.dart
@@ -87,11 +87,9 @@
 /// https://github.com/dart-lang/sdk/issues/28836), but for now we need to pay
 /// close attention to change them consistently.
 
-// TODO(sigmund): move this file to a shared package.
 import 'dart:convert' show jsonDecode, jsonEncode;
 
-import 'package:_fe_analyzer_shared/src/util/relativize.dart'
-    show relativizeUri, isWindows;
+import 'relativize.dart' show relativizeUri, isWindows;
 
 /// Contents from a single library specification file.
 ///
diff --git a/pkg/front_end/test/src/base/libraries_specification_test.dart b/pkg/_fe_analyzer_shared/test/util/libraries_specification_test.dart
similarity index 90%
rename from pkg/front_end/test/src/base/libraries_specification_test.dart
rename to pkg/_fe_analyzer_shared/test/util/libraries_specification_test.dart
index 033a877..10f9717 100644
--- a/pkg/front_end/test/src/base/libraries_specification_test.dart
+++ b/pkg/_fe_analyzer_shared/test/util/libraries_specification_test.dart
@@ -2,9 +2,7 @@
 // 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.
 
-// @dart = 2.9
-
-import 'package:front_end/src/base/libraries_specification.dart';
+import 'package:_fe_analyzer_shared/src/util/libraries_specification.dart';
 import 'package:test/test.dart';
 
 void main() {
@@ -91,7 +89,7 @@
       ''';
       var spec = LibrariesSpecification.parse(
           Uri.parse('org-dartlang-test:///f.json'), jsonString);
-      expect(spec.specificationFor("none").libraryInfoFor("c").patches.first,
+      expect(spec.specificationFor("none").libraryInfoFor("c")!.patches.first,
           Uri.parse('org-dartlang-test:///a.dart'));
 
       jsonString = '''
@@ -108,7 +106,7 @@
       ''';
       spec = LibrariesSpecification.parse(
           Uri.parse('org-dartlang-test:///f.json'), jsonString);
-      expect(spec.specificationFor("none").libraryInfoFor("c").patches.first,
+      expect(spec.specificationFor("none").libraryInfoFor("c")!.patches.first,
           Uri.parse('org-dartlang-test:///a.dart'));
     });
 
@@ -120,7 +118,7 @@
           Uri.parse('org-dartlang-test:///one/two/f.json'), jsonString);
       expect(spec, isNotNull);
       expect(
-          spec.specificationFor('none').libraryInfoFor('c').patches, isEmpty);
+          spec.specificationFor('none').libraryInfoFor('c')!.patches, isEmpty);
     });
 
     test('library paths are resolved from spec uri', () async {
@@ -130,7 +128,7 @@
 
       var spec = LibrariesSpecification.parse(
           Uri.parse('org-dartlang-test:///one/two/f.json'), jsonString);
-      expect(spec.specificationFor('none').libraryInfoFor('c').uri,
+      expect(spec.specificationFor('none').libraryInfoFor('c')!.uri,
           Uri.parse('org-dartlang-test:///one/two/c/main.dart'));
     });
 
@@ -153,9 +151,9 @@
 
       var spec = LibrariesSpecification.parse(
           Uri.parse('org-dartlang-test:///one/two/f.json'), jsonString);
-      expect(spec.specificationFor('none').libraryInfoFor('c').patches[0],
+      expect(spec.specificationFor('none').libraryInfoFor('c')!.patches[0],
           Uri.parse('org-dartlang-test:///one/a/p1.dart'));
-      expect(spec.specificationFor('none').libraryInfoFor('c').patches[1],
+      expect(spec.specificationFor('none').libraryInfoFor('c')!.patches[1],
           Uri.parse('org-dartlang-test:///one/a/p2.dart'));
     });
 
@@ -192,11 +190,11 @@
       var spec = LibrariesSpecification.parse(
           Uri.parse('org-dartlang-test:///one/two/f.json'), jsonString);
 
-      expect(spec.specificationFor('vm').libraryInfoFor('foo').uri,
+      expect(spec.specificationFor('vm').libraryInfoFor('foo')!.uri,
           Uri.parse('org-dartlang-test:///one/two/a/main.dart'));
-      expect(spec.specificationFor('vm').libraryInfoFor('bar').uri,
+      expect(spec.specificationFor('vm').libraryInfoFor('bar')!.uri,
           Uri.parse('org-dartlang-test:///one/two/b/main.dart'));
-      expect(spec.specificationFor('none').libraryInfoFor('c').uri,
+      expect(spec.specificationFor('none').libraryInfoFor('c')!.uri,
           Uri.parse('org-dartlang-test:///one/two/c/main.dart'));
     });
 
@@ -242,12 +240,12 @@
       ''';
       var spec = LibrariesSpecification.parse(
           Uri.parse('org-dartlang-test:///one/two/f.json'), jsonString);
+      expect(spec.specificationFor('vm').libraryInfoFor('foo')!.isSupported,
+          false);
       expect(
-          spec.specificationFor('vm').libraryInfoFor('foo').isSupported, false);
+          spec.specificationFor('vm').libraryInfoFor('bar')!.isSupported, true);
       expect(
-          spec.specificationFor('vm').libraryInfoFor('bar').isSupported, true);
-      expect(
-          spec.specificationFor('vm').libraryInfoFor('baz').isSupported, true);
+          spec.specificationFor('vm').libraryInfoFor('baz')!.isSupported, true);
     });
   });
 
diff --git a/pkg/analysis_server/lib/src/status/diagnostics.dart b/pkg/analysis_server/lib/src/status/diagnostics.dart
index a6d6d84..6b510af 100644
--- a/pkg/analysis_server/lib/src/status/diagnostics.dart
+++ b/pkg/analysis_server/lib/src/status/diagnostics.dart
@@ -994,7 +994,7 @@
     h3('Current registrations');
     p('Showing the LSP method name and the registration params sent to the '
         'client.');
-    prettyJson(server.capabilitiesComputer.currentRegistrations);
+    prettyJson(server.capabilitiesComputer.currentRegistrations.toList());
   }
 }
 
diff --git a/pkg/front_end/lib/src/api_prototype/compiler_options.dart b/pkg/front_end/lib/src/api_prototype/compiler_options.dart
index 7f14df8..e1b7997 100644
--- a/pkg/front_end/lib/src/api_prototype/compiler_options.dart
+++ b/pkg/front_end/lib/src/api_prototype/compiler_options.dart
@@ -55,8 +55,8 @@
   ///
   /// A libraries specification file is a JSON file that describes how to map
   /// `dart:*` libraries to URIs in the underlying [fileSystem].  See
-  /// `package:front_end/src/base/libraries_specification.dart` for details on
-  /// the format.
+  /// `package:_fe_analyzer_shared/src/util/libraries_specification.dart` for
+  /// details on the format.
   ///
   /// If a value is not specified and `compileSdk = true`, the compiler will
   /// infer at a default location under [sdkRoot], typically under
diff --git a/pkg/front_end/lib/src/api_unstable/dart2js.dart b/pkg/front_end/lib/src/api_unstable/dart2js.dart
index e811ba1..18d185d 100644
--- a/pkg/front_end/lib/src/api_unstable/dart2js.dart
+++ b/pkg/front_end/lib/src/api_unstable/dart2js.dart
@@ -12,6 +12,9 @@
 
 import 'package:_fe_analyzer_shared/src/scanner/scanner.dart' show StringToken;
 
+import 'package:_fe_analyzer_shared/src/util/libraries_specification.dart'
+    show LibrariesSpecification;
+
 import 'package:kernel/kernel.dart' show Component;
 
 import 'package:kernel/ast.dart' as ir;
@@ -29,8 +32,6 @@
 
 import '../base/processed_options.dart' show ProcessedOptions;
 
-import '../base/libraries_specification.dart' show LibrariesSpecification;
-
 import '../base/nnbd_mode.dart' show NnbdMode;
 
 import '../fasta/compiler_context.dart' show CompilerContext;
diff --git a/pkg/front_end/lib/src/base/processed_options.dart b/pkg/front_end/lib/src/base/processed_options.dart
index de2886d..b1377c6 100644
--- a/pkg/front_end/lib/src/base/processed_options.dart
+++ b/pkg/front_end/lib/src/base/processed_options.dart
@@ -8,6 +8,12 @@
 
 import 'package:_fe_analyzer_shared/src/messages/severity.dart' show Severity;
 
+import 'package:_fe_analyzer_shared/src/util/libraries_specification.dart'
+    show
+        LibrariesSpecification,
+        LibrariesSpecificationException,
+        TargetLibrariesSpecification;
+
 import 'package:kernel/binary/ast_from_binary.dart' show BinaryBuilder;
 
 import 'package:kernel/kernel.dart'
@@ -70,12 +76,6 @@
 
 import '../fasta/uri_translator.dart' show UriTranslator;
 
-import 'libraries_specification.dart'
-    show
-        LibrariesSpecification,
-        LibrariesSpecificationException,
-        TargetLibrariesSpecification;
-
 import 'nnbd_mode.dart';
 
 /// All options needed for the front end implementation.
diff --git a/pkg/front_end/lib/src/fasta/uri_translator.dart b/pkg/front_end/lib/src/fasta/uri_translator.dart
index c6777ee..cf624b4 100644
--- a/pkg/front_end/lib/src/fasta/uri_translator.dart
+++ b/pkg/front_end/lib/src/fasta/uri_translator.dart
@@ -6,7 +6,8 @@
 
 import 'package:package_config/package_config.dart';
 
-import '../base/libraries_specification.dart' show TargetLibrariesSpecification;
+import 'package:_fe_analyzer_shared/src/util/libraries_specification.dart'
+    show TargetLibrariesSpecification;
 import 'compiler_context.dart' show CompilerContext;
 import 'fasta_codes.dart';
 
diff --git a/pkg/front_end/test/fasta/testing/suite.dart b/pkg/front_end/test/fasta/testing/suite.dart
index f6468b1..b933c35 100644
--- a/pkg/front_end/test/fasta/testing/suite.dart
+++ b/pkg/front_end/test/fasta/testing/suite.dart
@@ -14,6 +14,8 @@
     show LanguageVersionToken, Token;
 
 import 'package:_fe_analyzer_shared/src/util/colors.dart' as colors;
+import 'package:_fe_analyzer_shared/src/util/libraries_specification.dart'
+    show LibraryInfo;
 import 'package:_fe_analyzer_shared/src/util/options.dart';
 import 'package:compiler/src/kernel/dart2js_target.dart';
 import 'package:dev_compiler/src/kernel/target.dart';
@@ -41,9 +43,6 @@
 import 'package:front_end/src/api_prototype/standard_file_system.dart'
     show StandardFileSystem;
 
-import 'package:front_end/src/base/libraries_specification.dart'
-    show LibraryInfo;
-
 import 'package:front_end/src/base/processed_options.dart'
     show ProcessedOptions;
 
diff --git a/pkg/front_end/test/fasta/uri_translator_test.dart b/pkg/front_end/test/fasta/uri_translator_test.dart
index d186bea..37e3564 100644
--- a/pkg/front_end/test/fasta/uri_translator_test.dart
+++ b/pkg/front_end/test/fasta/uri_translator_test.dart
@@ -4,7 +4,7 @@
 
 // @dart = 2.9
 
-import 'package:front_end/src/base/libraries_specification.dart';
+import 'package:_fe_analyzer_shared/src/util/libraries_specification.dart';
 import 'package:front_end/src/fasta/uri_translator.dart';
 import 'package:package_config/package_config.dart';
 import 'package:test/test.dart';
diff --git a/pkg/front_end/test/static_types/cfe_allowed.json b/pkg/front_end/test/static_types/cfe_allowed.json
index cd3125e..adc8898 100644
--- a/pkg/front_end/test/static_types/cfe_allowed.json
+++ b/pkg/front_end/test/static_types/cfe_allowed.json
@@ -1,5 +1,5 @@
 {
-  "pkg/front_end/lib/src/base/libraries_specification.dart": {
+  "pkg/_fe_analyzer_shared/lib/src/util/libraries_specification.dart": {
     "Dynamic invocation of 'toList'.": 1,
     "Dynamic invocation of 'map'.": 1,
     "Dynamic invocation of '[]='.": 1
@@ -24,4 +24,4 @@
   "pkg/_fe_analyzer_shared/lib/src/scanner/string_canonicalizer.dart": {
     "Dynamic invocation of '[]'.": 2
   }
-}
\ No newline at end of file
+}
diff --git a/runtime/vm/message_snapshot.cc b/runtime/vm/message_snapshot.cc
index 97196b1..4733db0 100644
--- a/runtime/vm/message_snapshot.cc
+++ b/runtime/vm/message_snapshot.cc
@@ -848,7 +848,9 @@
  public:
   explicit InstanceMessageDeserializationCluster(bool is_canonical)
       : MessageDeserializationCluster("Instance", is_canonical),
-        cls_(Class::Handle()) {}
+        cls_(Class::Handle()),
+        field_stores_(GrowableObjectArray::Handle(GrowableObjectArray::New())) {
+  }
   ~InstanceMessageDeserializationCluster() {}
 
   void ReadNodes(MessageDeserializer* d) {
@@ -897,7 +899,8 @@
           field ^= field_map.At(offset >> kCompressedWordSizeLog2);
           ASSERT(!field.IsNull());
           ASSERT(field.HostOffset() == offset);
-          field.RecordStore(value);
+          field_stores_.Add(field);
+          field_stores_.Add(value);
         }
 #endif
       }
@@ -926,11 +929,21 @@
       }
       return DartLibraryCalls::RehashObjectsInDartCore(d->thread(), expandos);
     }
+
+    Field& field = Field::Handle(d->zone());
+    Object& value = Object::Handle(d->zone());
+    for (int i = 0; i < field_stores_.Length(); i += 2) {
+      field ^= field_stores_.At(i);
+      value = field_stores_.At(i + 1);
+      field.RecordStore(value);
+    }
+
     return nullptr;
   }
 
  private:
   Class& cls_;
+  GrowableObjectArray& field_stores_;
 };
 
 class TypeMessageSerializationCluster : public MessageSerializationCluster {
diff --git a/sdk/lib/_internal/fix_data.yaml b/sdk/lib/_internal/fix_data.yaml
index 7f87843..98ccd55 100644
--- a/sdk/lib/_internal/fix_data.yaml
+++ b/sdk/lib/_internal/fix_data.yaml
@@ -1307,56 +1307,6 @@
       - kind: 'rename'
         newName: 'gzip'
 
-  - title: "Rename to 'read'"
-    date: 2021-09-20
-    element:
-      uris: [ 'dart:io' ]
-      field: 'READ'
-      inClass: 'FileMode'
-    changes:
-      - kind: 'rename'
-        newName: 'read'
-
-  - title: "Rename to 'write'"
-    date: 2021-09-20
-    element:
-      uris: [ 'dart:io' ]
-      field: 'WRITE'
-      inClass: 'FileMode'
-    changes:
-      - kind: 'rename'
-        newName: 'write'
-
-  - title: "Rename to 'append'"
-    date: 2021-09-20
-    element:
-      uris: [ 'dart:io' ]
-      field: 'APPEND'
-      inClass: 'FileMode'
-    changes:
-      - kind: 'rename'
-        newName: 'append'
-
-  - title: "Rename to 'writeOnly'"
-    date: 2021-09-20
-    element:
-      uris: [ 'dart:io' ]
-      field: 'WRITE_ONLY'
-      inClass: 'FileMode'
-    changes:
-      - kind: 'rename'
-        newName: 'writeOnly'
-
-  - title: "Rename to 'writeOnlyAppend'"
-    date: 2021-09-20
-    element:
-      uris: [ 'dart:io' ]
-      field: 'WRITE_ONLY_APPEND'
-      inClass: 'FileMode'
-    changes:
-      - kind: 'rename'
-        newName: 'writeOnlyAppend'
-
   - title: "Rename to 'shared'"
     date: 2021-09-20
     element:
diff --git a/sdk/lib/_internal/vm/lib/date_patch.dart b/sdk/lib/_internal/vm/lib/date_patch.dart
index eec2bf5..249399a 100644
--- a/sdk/lib/_internal/vm/lib/date_patch.dart
+++ b/sdk/lib/_internal/vm/lib/date_patch.dart
@@ -39,7 +39,8 @@
   DateTime.fromMillisecondsSinceEpoch(int millisecondsSinceEpoch,
       {bool isUtc: false})
       : this._withValue(
-            millisecondsSinceEpoch * Duration.microsecondsPerMillisecond,
+            _validateMilliseconds(millisecondsSinceEpoch) *
+                Duration.microsecondsPerMillisecond,
             isUtc: isUtc);
 
   @patch
@@ -58,6 +59,13 @@
     if (isUtc == null) throw new ArgumentError();
   }
 
+  static int _validateMilliseconds(int millisecondsSinceEpoch) =>
+      RangeError.checkValueInInterval(
+          millisecondsSinceEpoch,
+          -_maxMillisecondsSinceEpoch,
+          _maxMillisecondsSinceEpoch,
+          "millisecondsSinceEpoch");
+
   @patch
   DateTime._now()
       : isUtc = false,
diff --git a/tests/corelib/date_time_test.dart b/tests/corelib/date_time_test.dart
index e782ca5..21859ef 100644
--- a/tests/corelib/date_time_test.dart
+++ b/tests/corelib/date_time_test.dart
@@ -1188,6 +1188,34 @@
   Expect.equals("-010000-01-01T23:49:59.989979Z", d.toIso8601String());
 }
 
+void testRegression46966() {
+  // See http://dartbug.com/46966
+  // The constructor allowed numbers larger than 100_000_000 days
+  // from epoch, contrary to documentation (and web behavior).
+
+  // Maximally allowed milliseconds on either side of epoch
+  // (±100 000 000 days).
+  var maxMilliseconds = 100000000 * 24 * 60 * 60 * 1000;
+  var maxDate = DateTime.fromMillisecondsSinceEpoch(maxMilliseconds);
+  var minDate = DateTime.fromMillisecondsSinceEpoch(-maxMilliseconds);
+
+  // Throws if greater.
+  Expect.throws(() => DateTime.fromMillisecondsSinceEpoch(maxMilliseconds + 1));
+  Expect.throws(
+      () => DateTime.fromMillisecondsSinceEpoch(-maxMilliseconds - 1));
+
+  // But also if much greater.
+  // The badMin value overflows 64-bits when multiplied by 1000.
+  var badMin = 0x20c49ba5e353f8;
+  Expect.throws(() => DateTime.fromMillisecondsSinceEpoch(badMin));
+  Expect.throws(() => DateTime.fromMillisecondsSinceEpoch(-badMin));
+  Expect.throws(() => DateTime.fromMillisecondsSinceEpoch(badMin + 1));
+  Expect.throws(() => DateTime.fromMillisecondsSinceEpoch(-badMin - 1));
+  var badMax = double.maxFinite.toInt(); // 2^63-1 on VM, max double on JS.
+  Expect.throws(() => DateTime.fromMillisecondsSinceEpoch(badMax));
+  Expect.throws(() => DateTime.fromMillisecondsSinceEpoch(-badMax - 1));
+}
+
 void main() {
   testNow();
   testMillisecondsSinceEpoch();
@@ -1203,4 +1231,5 @@
   testWeekday();
   testToStrings();
   testIsoString();
+  testRegression46966();
 }
diff --git a/tests/corelib_2/date_time_test.dart b/tests/corelib_2/date_time_test.dart
index 798fc3a..09bbecd 100644
--- a/tests/corelib_2/date_time_test.dart
+++ b/tests/corelib_2/date_time_test.dart
@@ -1190,6 +1190,34 @@
   Expect.equals("-010000-01-01T23:49:59.989979Z", d.toIso8601String());
 }
 
+void testRegression46966() {
+  // See http://dartbug.com/46966
+  // The constructor allowed numbers larger than 100_000_000 days
+  // from epoch, contrary to documentation (and web behavior).
+
+  // Maximally allowed milliseconds on either side of epoch
+  // (±100 000 000 days).
+  var maxMilliseconds = 100000000 * 24 * 60 * 60 * 1000;
+  var maxDate = DateTime.fromMillisecondsSinceEpoch(maxMilliseconds);
+  var minDate = DateTime.fromMillisecondsSinceEpoch(-maxMilliseconds);
+
+  // Throws if greater.
+  Expect.throws(() => DateTime.fromMillisecondsSinceEpoch(maxMilliseconds + 1));
+  Expect.throws(
+      () => DateTime.fromMillisecondsSinceEpoch(-maxMilliseconds - 1));
+
+  // But also if much greater.
+  // The badMin value overflows 64-bits when multiplied by 1000.
+  var badMin = 0x20c49ba5e353f8;
+  Expect.throws(() => DateTime.fromMillisecondsSinceEpoch(badMin));
+  Expect.throws(() => DateTime.fromMillisecondsSinceEpoch(-badMin));
+  Expect.throws(() => DateTime.fromMillisecondsSinceEpoch(badMin + 1));
+  Expect.throws(() => DateTime.fromMillisecondsSinceEpoch(-badMin - 1));
+  var badMax = double.maxFinite.toInt(); // 2^63-1 on VM, max double on JS.
+  Expect.throws(() => DateTime.fromMillisecondsSinceEpoch(badMax));
+  Expect.throws(() => DateTime.fromMillisecondsSinceEpoch(-badMax - 1));
+}
+
 void main() {
   testNow();
   testMillisecondsSinceEpoch();
@@ -1205,4 +1233,5 @@
   testWeekday();
   testToStrings();
   testIsoString();
+  testRegression46966();
 }
diff --git a/tests/language/vm/regress_flutter_89584_test.dart b/tests/language/vm/regress_flutter_89584_test.dart
new file mode 100644
index 0000000..7fa3a2e
--- /dev/null
+++ b/tests/language/vm/regress_flutter_89584_test.dart
@@ -0,0 +1,43 @@
+// Copyright (c) 2021, 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.
+
+// This is a regression test for the bug in
+// https://github.com/flutter/flutter/issues/89584.
+// Verifies a Field::RecordStore is not done before all fields populated.
+
+// VMOptions=--no-enable-isolate-groups
+// VMOptions=--enable-isolate-groups
+
+import 'dart:isolate';
+import 'dart:typed_data';
+
+void main() async {
+  final receivePort = ReceivePort();
+  await Isolate.spawn<SendPort>(isolateEntry, receivePort.sendPort);
+  final wrapper = (await receivePort.first) as Wrapper;
+  final result = readWrapperUint8ListView(wrapper);
+  print(result);
+}
+
+const uint8ListLength = 1000000;
+
+void isolateEntry(SendPort sendPort) async {
+  final uint8list = Uint8List(uint8ListLength);
+  sendPort.send(Wrapper(
+    uint8list.buffer.asUint8List(0, uint8list.length),
+  ));
+}
+
+int readWrapperUint8ListView(Wrapper wrapper) {
+  var result = 0;
+  for (int i = 0; i < uint8ListLength; i++) {
+    result += wrapper.uint8ListView[i];
+  }
+  return result;
+}
+
+class Wrapper {
+  final Uint8List uint8ListView;
+  Wrapper(this.uint8ListView);
+}
diff --git a/tests/language_2/vm/regress_flutter_89584_test.dart b/tests/language_2/vm/regress_flutter_89584_test.dart
new file mode 100644
index 0000000..be08ce9
--- /dev/null
+++ b/tests/language_2/vm/regress_flutter_89584_test.dart
@@ -0,0 +1,45 @@
+// Copyright (c) 2021, 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.
+
+// @dart = 2.9
+
+// This is a regression test for the bug in
+// https://github.com/flutter/flutter/issues/89584.
+// Verifies a Field::RecordStore is not done before all fields populated.
+
+// VMOptions=--no-enable-isolate-groups
+// VMOptions=--enable-isolate-groups
+
+import 'dart:isolate';
+import 'dart:typed_data';
+
+void main() async {
+  final receivePort = ReceivePort();
+  await Isolate.spawn<SendPort>(isolateEntry, receivePort.sendPort);
+  final wrapper = (await receivePort.first) as Wrapper;
+  final result = readWrapperUint8ListView(wrapper);
+  print(result);
+}
+
+const uint8ListLength = 1000000;
+
+void isolateEntry(SendPort sendPort) async {
+  final uint8list = Uint8List(uint8ListLength);
+  sendPort.send(Wrapper(
+    uint8list.buffer.asUint8List(0, uint8list.length),
+  ));
+}
+
+int readWrapperUint8ListView(Wrapper wrapper) {
+  var result = 0;
+  for (int i = 0; i < uint8ListLength; i++) {
+    result += wrapper.uint8ListView[i];
+  }
+  return result;
+}
+
+class Wrapper {
+  final Uint8List uint8ListView;
+  Wrapper(this.uint8ListView);
+}
diff --git a/tests/lib/fix_data_tests/io.dart b/tests/lib/fix_data_tests/io.dart
index 7a29704..1f582d9 100644
--- a/tests/lib/fix_data_tests/io.dart
+++ b/tests/lib/fix_data_tests/io.dart
@@ -131,11 +131,6 @@
   print(ZLibOption.STRATEGY_DEFAULT);
   print(ZLIB);
   print(GZIP);
-  print(FileMode.READ);
-  print(FileMode.WRITE);
-  print(FileMode.APPEND);
-  print(FileMode.WRITE_ONLY);
-  print(FileMode.WRITE_ONLY_APPEND);
   print(FileLock.SHARED);
   print(FileLock.EXCLUSIVE);
   print(FileLock.BLOCKING_SHARED);
diff --git a/tests/lib/fix_data_tests/io.dart.expect b/tests/lib/fix_data_tests/io.dart.expect
index f26799a..590adfc 100644
--- a/tests/lib/fix_data_tests/io.dart.expect
+++ b/tests/lib/fix_data_tests/io.dart.expect
@@ -131,11 +131,6 @@
   print(ZLibOption.strategyDefault);
   print(zlib);
   print(gzip);
-  print(FileMode.read);
-  print(FileMode.write);
-  print(FileMode.append);
-  print(FileMode.writeOnly);
-  print(FileMode.writeOnlyAppend);
   print(FileLock.shared);
   print(FileLock.exclusive);
   print(FileLock.blockingShared);
diff --git a/tools/VERSION b/tools/VERSION
index 936a0ee..cd48444 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 15
 PATCH 0
-PRERELEASE 205
+PRERELEASE 206
 PRERELEASE_PATCH 0
\ No newline at end of file
diff --git a/tools/spec_parser/Dart.g b/tools/spec_parser/Dart.g
index 465b18a..e992711 100644
--- a/tools/spec_parser/Dart.g
+++ b/tools/spec_parser/Dart.g
@@ -4,7 +4,10 @@
 
 // CHANGES:
 //
-// v0.17 Correct `uri` to allow multi-line strings (raw and non-raw).
+// v0.18 Add support for enhanced `enum` declarations.
+//
+// v0.17 (58d917e7573c359580ade43845004dbbc62220d5) Correct `uri` to allow
+// multi-line strings (raw and non-raw).
 //
 // v0.16 (284695f1937c262523a9a11b9084213f889c83e0) Correct instance variable
 // declaration syntax such that `covariant late final` is allowed.
@@ -484,11 +487,15 @@
     ;
 
 enumType
-    :    ENUM typeIdentifier LBRACE enumEntry (',' enumEntry)* (',')? RBRACE
+    :    ENUM typeIdentifier typeParameters? mixins? interfaces? LBRACE
+         enumEntry (',' enumEntry)* (',')?
+         (';' (metadata classMemberDefinition)*)?
+         RBRACE
     ;
 
 enumEntry
-    :    metadata identifier
+    :    metadata identifier argumentPart?
+    |    metadata identifier typeArguments? '.' identifier arguments
     ;
 
 typeParameter
