Version 2.12.0-109.0.dev

Merge commit 'cec14bbf71c4e854b2b324fa18656949d9b42f05' into 'dev'
diff --git a/pkg/_fe_analyzer_shared/pubspec.yaml b/pkg/_fe_analyzer_shared/pubspec.yaml
index a62ab70..951d2a4 100644
--- a/pkg/_fe_analyzer_shared/pubspec.yaml
+++ b/pkg/_fe_analyzer_shared/pubspec.yaml
@@ -4,7 +4,7 @@
 homepage: https://github.com/dart-lang/sdk/tree/master/pkg/_fe_analyzer_shared
 
 environment:
-  sdk: '>=2.6.0 <3.0.0'
+  sdk: '>=2.9.0 <3.0.0'
 dependencies:
   meta: ^1.0.2
 dev_dependencies:
diff --git a/pkg/analyzer/pubspec.yaml b/pkg/analyzer/pubspec.yaml
index 6f40df1..c14bbd5 100644
--- a/pkg/analyzer/pubspec.yaml
+++ b/pkg/analyzer/pubspec.yaml
@@ -4,7 +4,7 @@
 homepage: https://github.com/dart-lang/sdk/tree/master/pkg/analyzer
 
 environment:
-  sdk: '>=2.7.0 <3.0.0'
+  sdk: '>=2.9.0 <3.0.0'
 
 dependencies:
   _fe_analyzer_shared: ^14.0.0
diff --git a/pkg/analyzer_plugin/pubspec.yaml b/pkg/analyzer_plugin/pubspec.yaml
index b3ba237..b48c87b 100644
--- a/pkg/analyzer_plugin/pubspec.yaml
+++ b/pkg/analyzer_plugin/pubspec.yaml
@@ -5,7 +5,7 @@
 homepage: https://github.com/dart-lang/sdk/tree/master/pkg/analyzer_plugin
 
 environment:
-  sdk: '>=2.3.0 <3.0.0'
+  sdk: '>=2.9.0 <3.0.0'
 
 dependencies:
   analyzer: '>=0.39.12 <0.41.0'
diff --git a/pkg/dartdev/benchmark/bench.dart b/pkg/dartdev/benchmark/bench.dart
index 689d437..fc62a89 100644
--- a/pkg/dartdev/benchmark/bench.dart
+++ b/pkg/dartdev/benchmark/bench.dart
@@ -105,7 +105,7 @@
 class DartStartup extends Benchmark {
   DartStartup()
       : super(
-          'dart-startup',
+          'script-startup',
           'Benchmark the startup time of a minimal Dart script (μs).',
         );
 
@@ -141,7 +141,7 @@
 class DartRunStartup extends Benchmark {
   DartRunStartup()
       : super(
-          'dart-run-startup',
+          'run-script-startup',
           'Benchmark the startup time of a minimal Dart script, executed with '
               '\`dart run\` (μs).',
         );
diff --git a/pkg/dartdev/lib/src/commands/analyze.dart b/pkg/dartdev/lib/src/commands/analyze.dart
index 55984a9..5e533f4 100644
--- a/pkg/dartdev/lib/src/commands/analyze.dart
+++ b/pkg/dartdev/lib/src/commands/analyze.dart
@@ -24,6 +24,8 @@
   /// message. The width left for the severity label plus the separator width.
   static const int _bodyIndentWidth = _severityWidth + 3;
 
+  static final String _bodyIndent = ' ' * _bodyIndentWidth;
+
   static final int _pipeCodeUnit = '|'.codeUnitAt(0);
 
   static final int _slashCodeUnit = '\\'.codeUnitAt(0);
@@ -62,6 +64,7 @@
 
   @override
   String get invocation => '${super.invocation} [<directory>]';
+
   @override
   FutureOr<int> run() async {
     if (argResults.rest.length > 1) {
@@ -167,6 +170,10 @@
 
     log.stdout('');
 
+    final wrapWidth = dartdevUsageLineLength == null
+        ? null
+        : (dartdevUsageLineLength - _bodyIndentWidth);
+
     for (final AnalysisError error in errors) {
       // error • Message ... at path.dart:line:col • (code)
 
@@ -183,19 +190,28 @@
         '(${error.code})',
       );
 
-      var padding = ' ' * _bodyIndentWidth;
       if (verbose) {
         for (var message in error.contextMessages) {
-          log.stdout('$padding${message.message} '
-              'at ${message.filePath}:${message.line}:${message.column}');
+          // Wrap longer context messages.
+          var contextMessage = wrapText(
+              '${message.message} at '
+              '${message.filePath}:${message.line}:${message.column}',
+              width: wrapWidth);
+          log.stdout('$_bodyIndent'
+              '${contextMessage.replaceAll('\n', '\n$_bodyIndent')}');
         }
       }
+
       if (error.correction != null) {
-        log.stdout('$padding${error.correction}');
+        // Wrap longer correction messages.
+        var correction = wrapText(error.correction, width: wrapWidth);
+        log.stdout(
+            '$_bodyIndent${correction.replaceAll('\n', '\n$_bodyIndent')}');
       }
+
       if (verbose) {
         if (error.url != null) {
-          log.stdout('$padding${error.url}');
+          log.stdout('$_bodyIndent${error.url}');
         }
       }
     }
diff --git a/pkg/dartdev/lib/src/utils.dart b/pkg/dartdev/lib/src/utils.dart
index 88b80ed..43249c3 100644
--- a/pkg/dartdev/lib/src/utils.dart
+++ b/pkg/dartdev/lib/src/utils.dart
@@ -68,3 +68,39 @@
 
   bool get isDartFile => this is File && p.extension(path) == '.dart';
 }
+
+/// Wraps [text] to the given [width], if provided.
+String wrapText(String text, {int width}) {
+  if (width == null) {
+    return text;
+  }
+
+  var buffer = StringBuffer();
+  var lineMaxEndIndex = width;
+  var lineStartIndex = 0;
+
+  while (true) {
+    if (lineMaxEndIndex >= text.length) {
+      buffer.write(text.substring(lineStartIndex, text.length));
+      break;
+    } else {
+      var lastSpaceIndex = text.lastIndexOf(' ', lineMaxEndIndex);
+      if (lastSpaceIndex == -1 || lastSpaceIndex <= lineStartIndex) {
+        // No space between [lineStartIndex] and [lineMaxEndIndex]. Get the
+        // _next_ space.
+        lastSpaceIndex = text.indexOf(' ', lineMaxEndIndex);
+        if (lastSpaceIndex == -1) {
+          // No space at all after [lineStartIndex].
+          lastSpaceIndex = text.length;
+          buffer.write(text.substring(lineStartIndex, lastSpaceIndex));
+          break;
+        }
+      }
+      buffer.write(text.substring(lineStartIndex, lastSpaceIndex));
+      buffer.writeln();
+      lineStartIndex = lastSpaceIndex + 1;
+    }
+    lineMaxEndIndex = lineStartIndex + width;
+  }
+  return buffer.toString();
+}
diff --git a/pkg/dartdev/test/utils_test.dart b/pkg/dartdev/test/utils_test.dart
index 9740dd1..51f6d5f 100644
--- a/pkg/dartdev/test/utils_test.dart
+++ b/pkg/dartdev/test/utils_test.dart
@@ -6,7 +6,7 @@
 import 'dart:io';
 
 import 'package:dartdev/src/utils.dart';
-import 'package:path/path.dart';
+import 'package:path/path.dart' as path;
 import 'package:test/test.dart';
 
 void main() {
@@ -32,7 +32,7 @@
 
     test('nested', () {
       var dir = Directory('foo');
-      expect(relativePath(join(dir.absolute.path, 'path'), dir), 'path');
+      expect(relativePath(path.join(dir.absolute.path, 'path'), dir), 'path');
     });
   });
 
@@ -93,10 +93,10 @@
     test('name', () {
       expect(Directory('').name, '');
       expect(Directory('dirName').name, 'dirName');
-      expect(Directory('dirName$separator').name, 'dirName');
+      expect(Directory('dirName${path.separator}').name, 'dirName');
       expect(File('').name, '');
       expect(File('foo.dart').name, 'foo.dart');
-      expect(File('${separator}foo.dart').name, 'foo.dart');
+      expect(File('${path.separator}foo.dart').name, 'foo.dart');
       expect(File('bar.bart').name, 'bar.bart');
     });
   });
@@ -133,6 +133,66 @@
           orderedEquals(['pub', 'publish', '--help']));
     });
   });
+
+  group('wrapText', () {
+    test('oneLine_wordLongerThanLine', () {
+      expect(wrapText('http://long-url', width: 10), equals('http://long-url'));
+    });
+
+    test('singleLine', () {
+      expect(wrapText('one two', width: 10), equals('one two'));
+    });
+
+    test('singleLine_exactLength', () {
+      expect(wrapText('one twoooo', width: 10), equals('one twoooo'));
+    });
+
+    test('singleLine_exactLength_minusOne', () {
+      expect(wrapText('one twooo', width: 10), equals('one twooo'));
+    });
+
+    test('singleLine_exactLength_plusOne', () {
+      expect(wrapText('one twooooo', width: 10), equals('one\ntwooooo'));
+    });
+
+    test('twoLines_exactLength', () {
+      expect(wrapText('one two three four', width: 10),
+          equals('one two\nthree four'));
+    });
+
+    test('twoLines_exactLength_minusOne', () {
+      expect(wrapText('one two three fou', width: 10),
+          equals('one two\nthree fou'));
+    });
+
+    test('twoLines_exactLength_plusOne', () {
+      expect(wrapText('one two three fourr', width: 10),
+          equals('one two\nthree\nfourr'));
+    });
+
+    test('twoLines_lastLineEndsWithSpace', () {
+      expect(wrapText('one two three ', width: 10), equals('one two\nthree '));
+    });
+
+    test('twoLines_multipleSpacesAtSplit', () {
+      expect(
+          wrapText('one two.  Three', width: 10), equals('one two. \nThree'));
+    });
+
+    test('twoLines_noSpaceLastLine', () {
+      expect(wrapText('one two three', width: 10), equals('one two\nthree'));
+    });
+
+    test('twoLines_wordLongerThanLine_firstLine', () {
+      expect(wrapText('http://long-url word', width: 10),
+          equals('http://long-url\nword'));
+    });
+
+    test('twoLines_wordLongerThanLine_lastLine', () {
+      expect(wrapText('word http://long-url', width: 10),
+          equals('word\nhttp://long-url'));
+    });
+  });
 }
 
 const String _packageData = '''{
diff --git a/runtime/lib/mirrors.cc b/runtime/lib/mirrors.cc
index a829957..eddf299 100644
--- a/runtime/lib/mirrors.cc
+++ b/runtime/lib/mirrors.cc
@@ -435,11 +435,12 @@
                                                  const LibraryPrefix& prefix,
                                                  const bool is_import,
                                                  const bool is_deferred) {
-  const Library& importee = Library::Handle(ns.library());
+  const Library& importee = Library::Handle(ns.target());
   const Array& show_names = Array::Handle(ns.show_names());
   const Array& hide_names = Array::Handle(ns.hide_names());
 
-  Object& metadata = Object::Handle(ns.GetMetadata());
+  const Library& owner = Library::Handle(ns.owner());
+  Object& metadata = Object::Handle(owner.GetMetadata(ns));
   if (metadata.IsError()) {
     Exceptions::PropagateError(Error::Cast(metadata));
     UNREACHABLE();
diff --git a/runtime/vm/canonical_tables.h b/runtime/vm/canonical_tables.h
index 69b79eb..3fd3f24 100644
--- a/runtime/vm/canonical_tables.h
+++ b/runtime/vm/canonical_tables.h
@@ -254,6 +254,38 @@
 typedef UnorderedHashSet<CanonicalTypeArgumentsTraits>
     CanonicalTypeArgumentsSet;
 
+class MetadataMapTraits {
+ public:
+  static const char* Name() { return "MetadataMapTraits"; }
+  static bool ReportStats() { return false; }
+  static bool IsMatch(const Object& key, const Object& candidate) {
+    return key.raw() == candidate.raw();
+  }
+  static uword Hash(const Object& key) {
+#if !defined(DART_PRECOMPILED_RUNTIME)
+    if (key.IsLibrary()) {
+      return String::Hash(Library::Cast(key).url());
+    } else if (key.IsClass()) {
+      return String::Hash(Class::Cast(key).Name());
+    } else if (key.IsPatchClass()) {
+      return Hash(Object::Handle(PatchClass::Cast(key).patched_class()));
+    } else if (key.IsFunction()) {
+      return CombineHashes(String::Hash(Function::Cast(key).name()),
+                           Hash(Object::Handle(Function::Cast(key).Owner())));
+    } else if (key.IsField()) {
+      return CombineHashes(String::Hash(Field::Cast(key).name()),
+                           Hash(Object::Handle(Field::Cast(key).Owner())));
+    } else if (key.IsTypeParameter()) {
+      return TypeParameter::Cast(key).Hash();
+    } else if (key.IsNamespace()) {
+      return Hash(Library::Handle(Namespace::Cast(key).target()));
+    }
+#endif
+    UNREACHABLE();
+  }
+};
+typedef UnorderedHashMap<MetadataMapTraits> MetadataMap;
+
 }  // namespace dart
 
 #endif  // RUNTIME_VM_CANONICAL_TABLES_H_
diff --git a/runtime/vm/clustered_snapshot.cc b/runtime/vm/clustered_snapshot.cc
index 70d7a0d..4070944 100644
--- a/runtime/vm/clustered_snapshot.cc
+++ b/runtime/vm/clustered_snapshot.cc
@@ -5836,7 +5836,12 @@
   WriteUnsigned(num_objects);
   WriteUnsigned(canonical_clusters.length());
   WriteUnsigned(clusters.length());
-  WriteUnsigned(initial_field_table_->NumFieldIds());
+  // TODO(dartbug.com/36097): Not every snapshot carries the field table.
+  if (current_loading_unit_id_ <= LoadingUnit::kRootId) {
+    WriteUnsigned(initial_field_table_->NumFieldIds());
+  } else {
+    WriteUnsigned(0);
+  }
 
   for (SerializationCluster* cluster : canonical_clusters) {
     cluster->WriteAndMeasureAlloc(this);
@@ -6572,8 +6577,8 @@
   refs_ = Array::New(num_objects_ + kFirstReference, Heap::kOld);
   if (initial_field_table_len > 0) {
     initial_field_table_->AllocateIndex(initial_field_table_len - 1);
+    ASSERT_EQUAL(initial_field_table_->NumFieldIds(), initial_field_table_len);
   }
-  ASSERT_EQUAL(initial_field_table_->NumFieldIds(), initial_field_table_len);
 
   {
     NoSafepointScope no_safepoint;
diff --git a/runtime/vm/compiler/aot/precompiler.cc b/runtime/vm/compiler/aot/precompiler.cc
index ea2fc4a..06e7c4c 100644
--- a/runtime/vm/compiler/aot/precompiler.cc
+++ b/runtime/vm/compiler/aot/precompiler.cc
@@ -2117,47 +2117,9 @@
 
 void Precompiler::DropMetadata() {
   Library& lib = Library::Handle(Z);
-  const GrowableObjectArray& null_growable_list =
-      GrowableObjectArray::Handle(Z);
-  Array& dependencies = Array::Handle(Z);
-  Namespace& ns = Namespace::Handle(Z);
-  const Field& null_field = Field::Handle(Z);
-  GrowableObjectArray& metadata = GrowableObjectArray::Handle(Z);
-  Field& metadata_field = Field::Handle(Z);
-
   for (intptr_t i = 0; i < libraries_.Length(); i++) {
     lib ^= libraries_.At(i);
-    metadata ^= lib.metadata();
-    for (intptr_t j = 0; j < metadata.Length(); j++) {
-      metadata_field ^= metadata.At(j);
-      if (metadata_field.is_static()) {
-        // Although this field will become garbage after clearing the list
-        // below, we also need to clear its value from the field table.
-        // The value may be an instance of an otherwise dead class, and if
-        // it remains in the field table we can get an instance on the heap
-        // with a deleted class.
-        metadata_field.SetStaticValue(Object::null_instance(),
-                                      /*save_initial_value=*/true);
-      }
-    }
-
-    lib.set_metadata(null_growable_list);
-
-    dependencies = lib.imports();
-    for (intptr_t j = 0; j < dependencies.Length(); j++) {
-      ns ^= dependencies.At(j);
-      if (!ns.IsNull()) {
-        ns.set_metadata_field(null_field);
-      }
-    }
-
-    dependencies = lib.exports();
-    for (intptr_t j = 0; j < dependencies.Length(); j++) {
-      ns ^= dependencies.At(j);
-      if (!ns.IsNull()) {
-        ns.set_metadata_field(null_field);
-      }
-    }
+    lib.set_metadata(Array::null_array());
   }
 }
 
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler.h b/runtime/vm/compiler/backend/flow_graph_compiler.h
index 33f2627..ca9a298 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler.h
+++ b/runtime/vm/compiler/backend/flow_graph_compiler.h
@@ -364,7 +364,7 @@
   LateInitializationErrorSlowPath(LoadFieldInstr* instruction,
                                   intptr_t try_index)
       : ThrowErrorSlowPathCode(instruction,
-                               kLateInitializationErrorRuntimeEntry,
+                               kLateFieldNotInitializedErrorRuntimeEntry,
                                try_index) {}
   virtual const char* name() { return "late initialization error"; }
 
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
index 15d0a86..d466c551 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.cc
@@ -2064,7 +2064,7 @@
       // The variable has no initializer, so throw a LateInitializationError.
       Fragment initialize(is_uninitialized);
       initialize += flow_graph_builder_->ThrowLateInitializationError(
-          position, variable->name());
+          position, "_throwLocalNotInitialized", variable->name());
       initialize += Goto(join);
     }
   }
@@ -2130,7 +2130,7 @@
       // Already initialized, so throw a LateInitializationError.
       Fragment already_initialized(is_initialized);
       already_initialized += flow_graph_builder_->ThrowLateInitializationError(
-          position, variable->name());
+          position, "_throwLocalAlreadyInitialized", variable->name());
       already_initialized += Goto(join);
     }
 
diff --git a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
index 175cc4e..0718d9d 100644
--- a/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
+++ b/runtime/vm/compiler/frontend/kernel_binary_flowgraph.h
@@ -217,8 +217,6 @@
   Fragment StringInterpolate(TokenPosition position);
   Fragment StringInterpolateSingle(TokenPosition position);
   Fragment ThrowTypeError();
-  Fragment ThrowLateInitializationError(TokenPosition position,
-                                        const String& name);
   Fragment LoadInstantiatorTypeArguments();
   Fragment LoadFunctionTypeArguments();
   Fragment InstantiateType(const AbstractType& type);
diff --git a/runtime/vm/compiler/frontend/kernel_to_il.cc b/runtime/vm/compiler/frontend/kernel_to_il.cc
index 105feaa..e84cc87 100644
--- a/runtime/vm/compiler/frontend/kernel_to_il.cc
+++ b/runtime/vm/compiler/frontend/kernel_to_il.cc
@@ -440,22 +440,24 @@
   }
 }
 
-Fragment FlowGraphBuilder::ThrowLateInitializationError(TokenPosition position,
-                                                        const String& name) {
-  const Class& klass = Class::ZoneHandle(
-      Z, Library::LookupCoreClass(Symbols::LateInitializationError()));
+Fragment FlowGraphBuilder::ThrowLateInitializationError(
+    TokenPosition position,
+    const char* throw_method_name,
+    const String& name) {
+  const Class& klass =
+      Class::ZoneHandle(Z, Library::LookupCoreClass(Symbols::LateError()));
   ASSERT(!klass.IsNull());
 
   const auto& error = klass.EnsureIsFinalized(thread_);
   ASSERT(error == Error::null());
   const Function& throw_new =
       Function::ZoneHandle(Z, klass.LookupStaticFunctionAllowPrivate(
-                                  H.DartSymbolObfuscate("_throwNew")));
+                                  H.DartSymbolObfuscate(throw_method_name)));
   ASSERT(!throw_new.IsNull());
 
   Fragment instructions;
 
-  // Call _LateInitializationError._throwNew.
+  // Call LateError._throwFoo.
   instructions += Constant(name);
   instructions += StaticCall(position, throw_new,
                              /* argument_count = */ 1, ICData::kStatic);
@@ -495,7 +497,8 @@
       // If the field is already initialized, throw a LateInitializationError.
       Fragment already_initialized(is_initialized);
       already_initialized += ThrowLateInitializationError(
-          position, String::ZoneHandle(Z, field.name()));
+          position, "_throwFieldAlreadyInitialized",
+          String::ZoneHandle(Z, field.name()));
       already_initialized += Goto(join);
     }
 
diff --git a/runtime/vm/compiler/frontend/kernel_to_il.h b/runtime/vm/compiler/frontend/kernel_to_il.h
index 6d4eaa8..1041f9c 100644
--- a/runtime/vm/compiler/frontend/kernel_to_il.h
+++ b/runtime/vm/compiler/frontend/kernel_to_il.h
@@ -224,6 +224,7 @@
   Fragment ThrowTypeError();
   Fragment ThrowNoSuchMethodError(const Function& target);
   Fragment ThrowLateInitializationError(TokenPosition position,
+                                        const char* throw_method_name,
                                         const String& name);
   Fragment BuildImplicitClosureCreation(const Function& target);
 
diff --git a/runtime/vm/compiler/runtime_offsets_extracted.h b/runtime/vm/compiler/runtime_offsets_extracted.h
index e4dae18..2a76c83 100644
--- a/runtime/vm/compiler/runtime_offsets_extracted.h
+++ b/runtime/vm/compiler/runtime_offsets_extracted.h
@@ -221,9 +221,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 368;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    688;
-static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     692;
+static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
+    696;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_code_offset = 120;
 static constexpr dart::compiler::target::word
@@ -248,7 +248,7 @@
     Thread_allocate_object_slow_entry_point_offset = 288;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 196;
-static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 724;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 728;
 static constexpr dart::compiler::target::word
     Thread_auto_scope_native_wrapper_entry_point_offset = 332;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 112;
@@ -259,7 +259,7 @@
     Thread_call_to_runtime_entry_point_offset = 268;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 136;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 732;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 736;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 48;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
@@ -277,7 +277,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 248;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    708;
+    712;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 252;
 static constexpr dart::compiler::target::word
@@ -297,11 +297,11 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 364;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    696;
+    700;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 132;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    720;
+    724;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 44;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     68;
@@ -344,11 +344,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 104;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 336;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 700;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 704;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 704;
+    Thread_saved_shadow_call_stack_offset = 708;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    712;
+    716;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 240;
 static constexpr dart::compiler::target::word
@@ -381,7 +381,7 @@
     Thread_write_barrier_entry_point_offset = 260;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     40;
-static constexpr dart::compiler::target::word Thread_callback_code_offset = 716;
+static constexpr dart::compiler::target::word Thread_callback_code_offset = 720;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset = 8;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 12;
 static constexpr dart::compiler::target::word Type_arguments_offset = 16;
@@ -433,7 +433,7 @@
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        656, 660, 664, 668, 672, -1, 676, -1, 680, 684, -1, -1, -1, -1, -1, -1};
+        660, 664, 668, 672, 676, -1, 680, -1, 684, 688, -1, -1, -1, -1, -1, -1};
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 8;
 static constexpr dart::compiler::target::word Array_InstanceSize = 12;
 static constexpr dart::compiler::target::word Array_header_size = 12;
@@ -738,9 +738,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1392;
-static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     1400;
+static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
+    1408;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
@@ -766,7 +766,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 384;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1464;
+    1472;
 static constexpr dart::compiler::target::word
     Thread_auto_scope_native_wrapper_entry_point_offset = 656;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
@@ -777,7 +777,7 @@
     Thread_call_to_runtime_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 264;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1480;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1488;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
@@ -795,7 +795,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1432;
+    1440;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
@@ -815,11 +815,11 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 720;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1408;
+    1416;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 256;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1456;
+    1464;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     136;
@@ -862,11 +862,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 664;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1416;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1424;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1424;
+    Thread_saved_shadow_call_stack_offset = 1432;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1440;
+    1448;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
@@ -900,7 +900,7 @@
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     80;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1448;
+    1456;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
     16;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
@@ -953,8 +953,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1304, 1312, 1320, 1328, -1,   -1,   1336, 1344,
-        1352, 1360, 1368, -1,   1376, 1384, -1,   -1};
+        1312, 1320, 1328, 1336, -1,   -1,   1344, 1352,
+        1360, 1368, 1376, -1,   1384, 1392, -1,   -1};
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_InstanceSize = 24;
 static constexpr dart::compiler::target::word Array_header_size = 24;
@@ -1257,9 +1257,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 368;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    656;
-static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     660;
+static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
+    664;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_code_offset = 120;
 static constexpr dart::compiler::target::word
@@ -1284,7 +1284,7 @@
     Thread_allocate_object_slow_entry_point_offset = 288;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 196;
-static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 692;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 696;
 static constexpr dart::compiler::target::word
     Thread_auto_scope_native_wrapper_entry_point_offset = 332;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 112;
@@ -1295,7 +1295,7 @@
     Thread_call_to_runtime_entry_point_offset = 268;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 136;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 700;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 704;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 48;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
@@ -1313,7 +1313,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 248;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    676;
+    680;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 252;
 static constexpr dart::compiler::target::word
@@ -1333,11 +1333,11 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 364;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    664;
+    668;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 132;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    688;
+    692;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 44;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     68;
@@ -1380,11 +1380,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 104;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 336;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 668;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 672;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 672;
+    Thread_saved_shadow_call_stack_offset = 676;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    680;
+    684;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 240;
 static constexpr dart::compiler::target::word
@@ -1417,7 +1417,7 @@
     Thread_write_barrier_entry_point_offset = 260;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     40;
-static constexpr dart::compiler::target::word Thread_callback_code_offset = 684;
+static constexpr dart::compiler::target::word Thread_callback_code_offset = 688;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset = 8;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 12;
 static constexpr dart::compiler::target::word Type_arguments_offset = 16;
@@ -1771,9 +1771,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1464;
-static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     1472;
+static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
+    1480;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
@@ -1799,7 +1799,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 384;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1536;
+    1544;
 static constexpr dart::compiler::target::word
     Thread_auto_scope_native_wrapper_entry_point_offset = 656;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
@@ -1810,7 +1810,7 @@
     Thread_call_to_runtime_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 264;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1552;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1560;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
@@ -1828,7 +1828,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1504;
+    1512;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
@@ -1848,11 +1848,11 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 720;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1480;
+    1488;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 256;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1528;
+    1536;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     136;
@@ -1895,11 +1895,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 664;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1488;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1496;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1496;
+    Thread_saved_shadow_call_stack_offset = 1504;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1512;
+    1520;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
@@ -1933,7 +1933,7 @@
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     80;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1520;
+    1528;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
     16;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
@@ -1986,9 +1986,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1304, 1312, 1320, 1328, 1336, 1344, 1352, 1360, 1368, 1376, 1384,
-        1392, 1400, 1408, 1416, -1,   -1,   -1,   -1,   1424, 1432, -1,
-        -1,   1440, 1448, 1456, -1,   -1,   -1,   -1,   -1,   -1};
+        1312, 1320, 1328, 1336, 1344, 1352, 1360, 1368, 1376, 1384, 1392,
+        1400, 1408, 1416, 1424, -1,   -1,   -1,   -1,   1432, 1440, -1,
+        -1,   1448, 1456, 1464, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_InstanceSize = 24;
 static constexpr dart::compiler::target::word Array_header_size = 24;
@@ -2290,9 +2290,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 368;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    688;
-static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     692;
+static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
+    696;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_code_offset = 120;
 static constexpr dart::compiler::target::word
@@ -2317,7 +2317,7 @@
     Thread_allocate_object_slow_entry_point_offset = 288;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 196;
-static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 724;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 728;
 static constexpr dart::compiler::target::word
     Thread_auto_scope_native_wrapper_entry_point_offset = 332;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 112;
@@ -2328,7 +2328,7 @@
     Thread_call_to_runtime_entry_point_offset = 268;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 136;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 732;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 736;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 48;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
@@ -2346,7 +2346,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 248;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    708;
+    712;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 252;
 static constexpr dart::compiler::target::word
@@ -2366,11 +2366,11 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 364;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    696;
+    700;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 132;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    720;
+    724;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 44;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     68;
@@ -2413,11 +2413,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 104;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 336;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 700;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 704;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 704;
+    Thread_saved_shadow_call_stack_offset = 708;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    712;
+    716;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 240;
 static constexpr dart::compiler::target::word
@@ -2450,7 +2450,7 @@
     Thread_write_barrier_entry_point_offset = 260;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     40;
-static constexpr dart::compiler::target::word Thread_callback_code_offset = 716;
+static constexpr dart::compiler::target::word Thread_callback_code_offset = 720;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset = 8;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 12;
 static constexpr dart::compiler::target::word Type_arguments_offset = 16;
@@ -2499,7 +2499,7 @@
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        656, 660, 664, 668, 672, -1, 676, -1, 680, 684, -1, -1, -1, -1, -1, -1};
+        660, 664, 668, 672, 676, -1, 680, -1, 684, 688, -1, -1, -1, -1, -1, -1};
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 8;
 static constexpr dart::compiler::target::word Array_InstanceSize = 12;
 static constexpr dart::compiler::target::word Array_header_size = 12;
@@ -2801,9 +2801,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1392;
-static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     1400;
+static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
+    1408;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
@@ -2829,7 +2829,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 384;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1464;
+    1472;
 static constexpr dart::compiler::target::word
     Thread_auto_scope_native_wrapper_entry_point_offset = 656;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
@@ -2840,7 +2840,7 @@
     Thread_call_to_runtime_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 264;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1480;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1488;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
@@ -2858,7 +2858,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1432;
+    1440;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
@@ -2878,11 +2878,11 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 720;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1408;
+    1416;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 256;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1456;
+    1464;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     136;
@@ -2925,11 +2925,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 664;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1416;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1424;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1424;
+    Thread_saved_shadow_call_stack_offset = 1432;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1440;
+    1448;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
@@ -2963,7 +2963,7 @@
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     80;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1448;
+    1456;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
     16;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
@@ -3013,8 +3013,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1304, 1312, 1320, 1328, -1,   -1,   1336, 1344,
-        1352, 1360, 1368, -1,   1376, 1384, -1,   -1};
+        1312, 1320, 1328, 1336, -1,   -1,   1344, 1352,
+        1360, 1368, 1376, -1,   1384, 1392, -1,   -1};
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_InstanceSize = 24;
 static constexpr dart::compiler::target::word Array_header_size = 24;
@@ -3314,9 +3314,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 368;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    656;
-static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     660;
+static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
+    664;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_code_offset = 120;
 static constexpr dart::compiler::target::word
@@ -3341,7 +3341,7 @@
     Thread_allocate_object_slow_entry_point_offset = 288;
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 196;
-static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 692;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 696;
 static constexpr dart::compiler::target::word
     Thread_auto_scope_native_wrapper_entry_point_offset = 332;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 112;
@@ -3352,7 +3352,7 @@
     Thread_call_to_runtime_entry_point_offset = 268;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 136;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 700;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 704;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 48;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
@@ -3370,7 +3370,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 248;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    676;
+    680;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 252;
 static constexpr dart::compiler::target::word
@@ -3390,11 +3390,11 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 364;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    664;
+    668;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 132;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    688;
+    692;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 44;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     68;
@@ -3437,11 +3437,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 104;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 336;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 668;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 672;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 672;
+    Thread_saved_shadow_call_stack_offset = 676;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    680;
+    684;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 240;
 static constexpr dart::compiler::target::word
@@ -3474,7 +3474,7 @@
     Thread_write_barrier_entry_point_offset = 260;
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     40;
-static constexpr dart::compiler::target::word Thread_callback_code_offset = 684;
+static constexpr dart::compiler::target::word Thread_callback_code_offset = 688;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset = 8;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 12;
 static constexpr dart::compiler::target::word Type_arguments_offset = 16;
@@ -3822,9 +3822,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1464;
-static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
     1472;
+static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
+    1480;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
@@ -3850,7 +3850,7 @@
 static constexpr dart::compiler::target::word
     Thread_allocate_object_slow_stub_offset = 384;
 static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
-    1536;
+    1544;
 static constexpr dart::compiler::target::word
     Thread_auto_scope_native_wrapper_entry_point_offset = 656;
 static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
@@ -3861,7 +3861,7 @@
     Thread_call_to_runtime_entry_point_offset = 528;
 static constexpr dart::compiler::target::word
     Thread_call_to_runtime_stub_offset = 264;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1552;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1560;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
@@ -3879,7 +3879,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1504;
+    1512;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
@@ -3899,11 +3899,11 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 720;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1480;
+    1488;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 256;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1528;
+    1536;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     136;
@@ -3946,11 +3946,11 @@
 static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
 static constexpr dart::compiler::target::word
     Thread_predefined_symbols_address_offset = 664;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1488;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1496;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1496;
+    Thread_saved_shadow_call_stack_offset = 1504;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1512;
+    1520;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
@@ -3984,7 +3984,7 @@
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     80;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1520;
+    1528;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
     16;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
@@ -4034,9 +4034,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1304, 1312, 1320, 1328, 1336, 1344, 1352, 1360, 1368, 1376, 1384,
-        1392, 1400, 1408, 1416, -1,   -1,   -1,   -1,   1424, 1432, -1,
-        -1,   1440, 1448, 1456, -1,   -1,   -1,   -1,   -1,   -1};
+        1312, 1320, 1328, 1336, 1344, 1352, 1360, 1368, 1376, 1384, 1392,
+        1400, 1408, 1416, 1424, -1,   -1,   -1,   -1,   1432, 1440, -1,
+        -1,   1448, 1456, 1464, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_InstanceSize = 24;
 static constexpr dart::compiler::target::word Array_header_size = 24;
@@ -4361,9 +4361,9 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_AllocateArray_entry_point_offset = 368;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 688;
+    AOT_Thread_active_exception_offset = 692;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 692;
+    AOT_Thread_active_stacktrace_offset = 696;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_code_offset = 120;
 static constexpr dart::compiler::target::word
@@ -4389,7 +4389,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 196;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    724;
+    728;
 static constexpr dart::compiler::target::word
     AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 332;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
@@ -4402,7 +4402,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 136;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    732;
+    736;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 48;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
@@ -4421,7 +4421,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 248;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 708;
+    AOT_Thread_execution_state_offset = 712;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 252;
 static constexpr dart::compiler::target::word
@@ -4441,11 +4441,11 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_float_zerow_address_offset = 364;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 696;
+    AOT_Thread_global_object_pool_offset = 700;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 132;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 720;
+    AOT_Thread_exit_through_ffi_offset = 724;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 44;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 68;
@@ -4490,11 +4490,11 @@
     104;
 static constexpr dart::compiler::target::word
     AOT_Thread_predefined_symbols_address_offset = 336;
-static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 700;
+static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 704;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 704;
+    AOT_Thread_saved_shadow_call_stack_offset = 708;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 712;
+    AOT_Thread_safepoint_state_offset = 716;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 240;
 static constexpr dart::compiler::target::word
@@ -4530,7 +4530,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 40;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    716;
+    720;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 8;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
@@ -4595,7 +4595,7 @@
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        656, 660, 664, 668, 672, -1, 676, -1, 680, 684, -1, -1, -1, -1, -1, -1};
+        660, 664, 668, 672, 676, -1, 680, -1, 684, 688, -1, -1, -1, -1, -1, -1};
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 8;
 static constexpr dart::compiler::target::word AOT_Array_InstanceSize = 12;
 static constexpr dart::compiler::target::word AOT_Array_header_size = 12;
@@ -4933,9 +4933,9 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1392;
+    AOT_Thread_active_exception_offset = 1400;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1400;
+    AOT_Thread_active_stacktrace_offset = 1408;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
@@ -4961,7 +4961,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 384;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1464;
+    1472;
 static constexpr dart::compiler::target::word
     AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 656;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
@@ -4974,7 +4974,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 264;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1480;
+    1488;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
@@ -4993,7 +4993,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1432;
+    AOT_Thread_execution_state_offset = 1440;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
@@ -5013,11 +5013,11 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_float_zerow_address_offset = 720;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1408;
+    AOT_Thread_global_object_pool_offset = 1416;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 256;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1456;
+    AOT_Thread_exit_through_ffi_offset = 1464;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 136;
@@ -5063,11 +5063,11 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_predefined_symbols_address_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1416;
+    1424;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1424;
+    AOT_Thread_saved_shadow_call_stack_offset = 1432;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1440;
+    AOT_Thread_safepoint_state_offset = 1448;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
@@ -5103,7 +5103,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1448;
+    1456;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 16;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
@@ -5168,8 +5168,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1304, 1312, 1320, 1328, -1,   -1,   1336, 1344,
-        1352, 1360, 1368, -1,   1376, 1384, -1,   -1};
+        1312, 1320, 1328, 1336, -1,   -1,   1344, 1352,
+        1360, 1368, 1376, -1,   1384, 1392, -1,   -1};
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word AOT_Array_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Array_header_size = 24;
@@ -5510,9 +5510,9 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1464;
+    AOT_Thread_active_exception_offset = 1472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1472;
+    AOT_Thread_active_stacktrace_offset = 1480;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
@@ -5538,7 +5538,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 384;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1536;
+    1544;
 static constexpr dart::compiler::target::word
     AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 656;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
@@ -5551,7 +5551,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 264;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1552;
+    1560;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
@@ -5570,7 +5570,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1504;
+    AOT_Thread_execution_state_offset = 1512;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
@@ -5590,11 +5590,11 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_float_zerow_address_offset = 720;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1480;
+    AOT_Thread_global_object_pool_offset = 1488;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 256;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1528;
+    AOT_Thread_exit_through_ffi_offset = 1536;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 136;
@@ -5640,11 +5640,11 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_predefined_symbols_address_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1488;
+    1496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1496;
+    AOT_Thread_saved_shadow_call_stack_offset = 1504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1512;
+    AOT_Thread_safepoint_state_offset = 1520;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
@@ -5680,7 +5680,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1520;
+    1528;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 16;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
@@ -5745,9 +5745,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1304, 1312, 1320, 1328, 1336, 1344, 1352, 1360, 1368, 1376, 1384,
-        1392, 1400, 1408, 1416, -1,   -1,   -1,   -1,   1424, 1432, -1,
-        -1,   1440, 1448, 1456, -1,   -1,   -1,   -1,   -1,   -1};
+        1312, 1320, 1328, 1336, 1344, 1352, 1360, 1368, 1376, 1384, 1392,
+        1400, 1408, 1416, 1424, -1,   -1,   -1,   -1,   1432, 1440, -1,
+        -1,   1448, 1456, 1464, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word AOT_Array_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Array_header_size = 24;
@@ -6082,9 +6082,9 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_AllocateArray_entry_point_offset = 368;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 688;
+    AOT_Thread_active_exception_offset = 692;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 692;
+    AOT_Thread_active_stacktrace_offset = 696;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_code_offset = 120;
 static constexpr dart::compiler::target::word
@@ -6110,7 +6110,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 196;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    724;
+    728;
 static constexpr dart::compiler::target::word
     AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 332;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
@@ -6123,7 +6123,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 136;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    732;
+    736;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 48;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
@@ -6142,7 +6142,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 248;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 708;
+    AOT_Thread_execution_state_offset = 712;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 252;
 static constexpr dart::compiler::target::word
@@ -6162,11 +6162,11 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_float_zerow_address_offset = 364;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 696;
+    AOT_Thread_global_object_pool_offset = 700;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 132;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 720;
+    AOT_Thread_exit_through_ffi_offset = 724;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 44;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 68;
@@ -6211,11 +6211,11 @@
     104;
 static constexpr dart::compiler::target::word
     AOT_Thread_predefined_symbols_address_offset = 336;
-static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 700;
+static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 704;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 704;
+    AOT_Thread_saved_shadow_call_stack_offset = 708;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 712;
+    AOT_Thread_safepoint_state_offset = 716;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 240;
 static constexpr dart::compiler::target::word
@@ -6251,7 +6251,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 40;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    716;
+    720;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 8;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
@@ -6313,7 +6313,7 @@
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        656, 660, 664, 668, 672, -1, 676, -1, 680, 684, -1, -1, -1, -1, -1, -1};
+        660, 664, 668, 672, 676, -1, 680, -1, 684, 688, -1, -1, -1, -1, -1, -1};
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 8;
 static constexpr dart::compiler::target::word AOT_Array_InstanceSize = 12;
 static constexpr dart::compiler::target::word AOT_Array_header_size = 12;
@@ -6647,9 +6647,9 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1392;
+    AOT_Thread_active_exception_offset = 1400;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1400;
+    AOT_Thread_active_stacktrace_offset = 1408;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
@@ -6675,7 +6675,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 384;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1464;
+    1472;
 static constexpr dart::compiler::target::word
     AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 656;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
@@ -6688,7 +6688,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 264;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1480;
+    1488;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
@@ -6707,7 +6707,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1432;
+    AOT_Thread_execution_state_offset = 1440;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
@@ -6727,11 +6727,11 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_float_zerow_address_offset = 720;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1408;
+    AOT_Thread_global_object_pool_offset = 1416;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 256;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1456;
+    AOT_Thread_exit_through_ffi_offset = 1464;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 136;
@@ -6777,11 +6777,11 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_predefined_symbols_address_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1416;
+    1424;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1424;
+    AOT_Thread_saved_shadow_call_stack_offset = 1432;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1440;
+    AOT_Thread_safepoint_state_offset = 1448;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
@@ -6817,7 +6817,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1448;
+    1456;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 16;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
@@ -6879,8 +6879,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1304, 1312, 1320, 1328, -1,   -1,   1336, 1344,
-        1352, 1360, 1368, -1,   1376, 1384, -1,   -1};
+        1312, 1320, 1328, 1336, -1,   -1,   1344, 1352,
+        1360, 1368, 1376, -1,   1384, 1392, -1,   -1};
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word AOT_Array_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Array_header_size = 24;
@@ -7217,9 +7217,9 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_exception_offset = 1464;
+    AOT_Thread_active_exception_offset = 1472;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1472;
+    AOT_Thread_active_stacktrace_offset = 1480;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
@@ -7245,7 +7245,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_allocate_object_slow_stub_offset = 384;
 static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
-    1536;
+    1544;
 static constexpr dart::compiler::target::word
     AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 656;
 static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
@@ -7258,7 +7258,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_call_to_runtime_stub_offset = 264;
 static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
-    1552;
+    1560;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
@@ -7277,7 +7277,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_enter_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word
-    AOT_Thread_execution_state_offset = 1504;
+    AOT_Thread_execution_state_offset = 1512;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
@@ -7297,11 +7297,11 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_float_zerow_address_offset = 720;
 static constexpr dart::compiler::target::word
-    AOT_Thread_global_object_pool_offset = 1480;
+    AOT_Thread_global_object_pool_offset = 1488;
 static constexpr dart::compiler::target::word
     AOT_Thread_invoke_dart_code_stub_offset = 256;
 static constexpr dart::compiler::target::word
-    AOT_Thread_exit_through_ffi_offset = 1528;
+    AOT_Thread_exit_through_ffi_offset = 1536;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 136;
@@ -7347,11 +7347,11 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_predefined_symbols_address_offset = 664;
 static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
-    1488;
+    1496;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1496;
+    AOT_Thread_saved_shadow_call_stack_offset = 1504;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1512;
+    AOT_Thread_safepoint_state_offset = 1520;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
@@ -7387,7 +7387,7 @@
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_mask_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1520;
+    1528;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 16;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
@@ -7449,9 +7449,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1304, 1312, 1320, 1328, 1336, 1344, 1352, 1360, 1368, 1376, 1384,
-        1392, 1400, 1408, 1416, -1,   -1,   -1,   -1,   1424, 1432, -1,
-        -1,   1440, 1448, 1456, -1,   -1,   -1,   -1,   -1,   -1};
+        1312, 1320, 1328, 1336, 1344, 1352, 1360, 1368, 1376, 1384, 1392,
+        1400, 1408, 1416, 1424, -1,   -1,   -1,   -1,   1432, 1440, -1,
+        -1,   1448, 1456, 1464, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word AOT_Array_InstanceSize = 24;
 static constexpr dart::compiler::target::word AOT_Array_header_size = 24;
diff --git a/runtime/vm/compiler/stub_code_compiler.cc b/runtime/vm/compiler/stub_code_compiler.cc
index 5456c29..8295e00 100644
--- a/runtime/vm/compiler/stub_code_compiler.cc
+++ b/runtime/vm/compiler/stub_code_compiler.cc
@@ -121,7 +121,7 @@
     __ Bind(&throw_exception);
     __ PushObject(NullObject());  // Make room for (unused) result.
     __ PushRegister(kFieldReg);
-    __ CallRuntime(kLateInitializationErrorRuntimeEntry,
+    __ CallRuntime(kLateFieldAssignedDuringInitializationErrorRuntimeEntry,
                    /*argument_count=*/1);
     __ Breakpoint();
   }
@@ -692,7 +692,8 @@
                                                        bool with_fpu_regs) {
   auto perform_runtime_call = [&]() {
     __ PushRegister(LateInitializationErrorABI::kFieldReg);
-    __ CallRuntime(kLateInitializationErrorRuntimeEntry, /*argument_count=*/1);
+    __ CallRuntime(kLateFieldNotInitializedErrorRuntimeEntry,
+                   /*argument_count=*/1);
   };
   GenerateSharedStubGeneric(
       assembler, /*save_fpu_registers=*/with_fpu_regs,
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index 6f83c62..f8c16ec 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -6007,7 +6007,7 @@
     for (intptr_t j = 0; j < imports.Length(); j++) {
       ns ^= imports.At(j);
       if (ns.IsNull()) continue;
-      importee = ns.library();
+      importee = ns.target();
       importee_uri = importee.url();
       if (importee_uri.StartsWith(scheme_vm)) {
         result.Add(importer);
diff --git a/runtime/vm/exceptions.cc b/runtime/vm/exceptions.cc
index d67906f..6cc253e 100644
--- a/runtime/vm/exceptions.cc
+++ b/runtime/vm/exceptions.cc
@@ -1104,10 +1104,18 @@
   Exceptions::ThrowByType(Exceptions::kCompileTimeError, args);
 }
 
-void Exceptions::ThrowLateInitializationError(const String& name) {
+void Exceptions::ThrowLateFieldNotInitialized(const String& name) {
   const Array& args = Array::Handle(Array::New(1));
   args.SetAt(0, name);
-  Exceptions::ThrowByType(Exceptions::kLateInitializationError, args);
+  Exceptions::ThrowByType(Exceptions::kLateFieldNotInitialized, args);
+}
+
+void Exceptions::ThrowLateFieldAssignedDuringInitialization(
+    const String& name) {
+  const Array& args = Array::Handle(Array::New(1));
+  args.SetAt(0, name);
+  Exceptions::ThrowByType(Exceptions::kLateFieldAssignedDuringInitialization,
+                          args);
 }
 
 ObjectPtr Exceptions::Create(ExceptionType type, const Array& arguments) {
@@ -1197,9 +1205,15 @@
       library = Library::CoreLibrary();
       class_name = &Symbols::_CompileTimeError();
       break;
-    case kLateInitializationError:
-      library = Library::CoreLibrary();
-      class_name = &Symbols::LateInitializationError();
+    case kLateFieldAssignedDuringInitialization:
+      library = Library::InternalLibrary();
+      class_name = &Symbols::LateError();
+      constructor_name = &Symbols::DotFieldADI();
+      break;
+    case kLateFieldNotInitialized:
+      library = Library::InternalLibrary();
+      class_name = &Symbols::LateError();
+      constructor_name = &Symbols::DotFieldNI();
       break;
   }
 
diff --git a/runtime/vm/exceptions.h b/runtime/vm/exceptions.h
index e7b52e5..20aef13 100644
--- a/runtime/vm/exceptions.h
+++ b/runtime/vm/exceptions.h
@@ -67,7 +67,8 @@
     kAbstractClassInstantiation,
     kCyclicInitializationError,
     kCompileTimeError,
-    kLateInitializationError,
+    kLateFieldAssignedDuringInitialization,
+    kLateFieldNotInitialized,
   };
 
   DART_NORETURN static void ThrowByType(ExceptionType type,
@@ -83,7 +84,9 @@
                                             intptr_t expected_to);
   DART_NORETURN static void ThrowUnsupportedError(const char* msg);
   DART_NORETURN static void ThrowCompileTimeError(const LanguageError& error);
-  DART_NORETURN static void ThrowLateInitializationError(const String& name);
+  DART_NORETURN static void ThrowLateFieldAssignedDuringInitialization(
+      const String& name);
+  DART_NORETURN static void ThrowLateFieldNotInitialized(const String& name);
 
   // Returns a RawInstance if the exception is successfully created,
   // otherwise returns a RawError.
diff --git a/runtime/vm/isolate_reload.cc b/runtime/vm/isolate_reload.cc
index a9e660f..8e586b3 100644
--- a/runtime/vm/isolate_reload.cc
+++ b/runtime/vm/isolate_reload.cc
@@ -961,7 +961,7 @@
     for (intptr_t import_idx = 0; import_idx < ports.Length(); import_idx++) {
       ns ^= ports.At(import_idx);
       if (!ns.IsNull()) {
-        target = ns.library();
+        target = ns.target();
         target_url = target.url();
         if (!target_url.StartsWith(Symbols::DartExtensionScheme())) {
           (*imported_by)[target.index()]->Add(lib.index());
@@ -974,7 +974,7 @@
     for (intptr_t export_idx = 0; export_idx < ports.Length(); export_idx++) {
       ns ^= ports.At(export_idx);
       if (!ns.IsNull()) {
-        target = ns.library();
+        target = ns.target();
         (*imported_by)[target.index()]->Add(lib.index());
       }
     }
@@ -992,7 +992,7 @@
              import_idx++) {
           ns ^= ports.At(import_idx);
           if (!ns.IsNull()) {
-            target = ns.library();
+            target = ns.target();
             (*imported_by)[target.index()]->Add(lib.index());
           }
         }
diff --git a/runtime/vm/kernel.cc b/runtime/vm/kernel.cc
index 7c53e72..952e41a 100644
--- a/runtime/vm/kernel.cc
+++ b/runtime/vm/kernel.cc
@@ -430,26 +430,28 @@
   DISALLOW_COPY_AND_ASSIGN(MetadataEvaluator);
 };
 
-ObjectPtr EvaluateMetadata(const Field& metadata_field,
+ObjectPtr EvaluateMetadata(const Library& library,
+                           intptr_t kernel_offset,
                            bool is_annotations_offset) {
   LongJumpScope jump;
   if (setjmp(*jump.Set()) == 0) {
     Thread* thread = Thread::Current();
     Zone* zone = thread->zone();
     TranslationHelper helper(thread);
-    Script& script = Script::Handle(zone, metadata_field.Script());
+    Script& script = Script::Handle(
+        zone, Class::Handle(zone, library.toplevel_class()).script());
     helper.InitFromScript(script);
 
-    const Class& owner_class = Class::Handle(zone, metadata_field.Owner());
+    const Class& owner_class = Class::Handle(zone, library.toplevel_class());
     ActiveClass active_class;
     ActiveClassScope active_class_scope(&active_class, &owner_class);
 
     MetadataEvaluator metadata_evaluator(
         zone, &helper, script,
-        ExternalTypedData::Handle(zone, metadata_field.KernelData()),
-        metadata_field.KernelDataProgramOffset(), &active_class);
+        ExternalTypedData::Handle(zone, library.kernel_data()),
+        library.kernel_offset(), &active_class);
 
-    return metadata_evaluator.EvaluateMetadata(metadata_field.kernel_offset(),
+    return metadata_evaluator.EvaluateMetadata(kernel_offset,
                                                is_annotations_offset);
 
   } else {
diff --git a/runtime/vm/kernel.h b/runtime/vm/kernel.h
index 9b0d8de..ed66e25 100644
--- a/runtime/vm/kernel.h
+++ b/runtime/vm/kernel.h
@@ -196,7 +196,8 @@
 void CollectTokenPositionsFor(const Script& script);
 
 ObjectPtr EvaluateStaticConstFieldInitializer(const Field& field);
-ObjectPtr EvaluateMetadata(const Field& metadata_field,
+ObjectPtr EvaluateMetadata(const Library& library,
+                           intptr_t kernel_offset,
                            bool is_annotations_offset);
 ObjectPtr BuildParameterDescriptor(const Function& function);
 
diff --git a/runtime/vm/kernel_loader.cc b/runtime/vm/kernel_loader.cc
index e37f325..4dbcfb6 100644
--- a/runtime/vm/kernel_loader.cc
+++ b/runtime/vm/kernel_loader.cc
@@ -694,7 +694,7 @@
       // Dart_GetImportsOfScheme('dart-ext').
       const auto& native_library = Library::Handle(Library::New(uri_path));
       library.AddImport(Namespace::Handle(Namespace::New(
-          native_library, Array::null_array(), Array::null_array())));
+          native_library, Array::null_array(), Array::null_array(), library)));
     }
   }
 }
@@ -1122,8 +1122,7 @@
 
   if (FLAG_enable_mirrors && annotation_count > 0) {
     ASSERT(annotations_kernel_offset > 0);
-    library.AddLibraryMetadata(toplevel_class, TokenPosition::kNoSource,
-                               annotations_kernel_offset);
+    library.AddMetadata(library, annotations_kernel_offset);
   }
 
   if (register_class) {
@@ -1248,7 +1247,7 @@
 
     if ((FLAG_enable_mirrors || has_pragma_annotation) &&
         annotation_count > 0) {
-      library.AddFieldMetadata(field, TokenPosition::kNoSource, field_offset);
+      library.AddMetadata(field, field_offset);
     }
     fields_.Add(&field);
   }
@@ -1366,7 +1365,7 @@
           "import of dart:ffi is not supported in the current Dart runtime");
     }
     String& prefix = H.DartSymbolPlain(dependency_helper.name_index_);
-    ns = Namespace::New(target_library, show_names, hide_names);
+    ns = Namespace::New(target_library, show_names, hide_names, *library);
     if ((dependency_helper.flags_ & LibraryDependencyHelper::Export) != 0) {
       library->AddExport(ns);
     } else {
@@ -1389,8 +1388,7 @@
 
     if (FLAG_enable_mirrors && dependency_helper.annotation_count_ > 0) {
       ASSERT(annotations_kernel_offset > 0);
-      ns.AddMetadata(toplevel_class, TokenPosition::kNoSource,
-                     annotations_kernel_offset);
+      library->AddMetadata(ns, annotations_kernel_offset);
     }
 
     if (prefix.IsNull()) {
@@ -1511,9 +1509,7 @@
   }
 
   if ((FLAG_enable_mirrors || has_pragma_annotation) && annotation_count > 0) {
-    library.AddClassMetadata(*out_class, toplevel_class,
-                             TokenPosition::kNoSource,
-                             class_offset - correction_offset_);
+    library.AddMetadata(*out_class, class_offset - correction_offset_);
   }
 
   // We do not register expression evaluation classes with the VM:
@@ -1625,7 +1621,7 @@
       }
       if ((FLAG_enable_mirrors || has_pragma_annotation) &&
           annotation_count > 0) {
-        library.AddFieldMetadata(field, TokenPosition::kNoSource, field_offset);
+        library.AddMetadata(field, field_offset);
       }
       fields_.Add(&field);
     }
@@ -1724,8 +1720,7 @@
 
     if ((FLAG_enable_mirrors || has_pragma_annotation) &&
         annotation_count > 0) {
-      library.AddFunctionMetadata(function, TokenPosition::kNoSource,
-                                  constructor_offset);
+      library.AddMetadata(function, constructor_offset);
     }
   }
 
@@ -2049,8 +2044,7 @@
   helper_.SetOffset(procedure_end);
 
   if (annotation_count > 0) {
-    library.AddFunctionMetadata(function, TokenPosition::kNoSource,
-                                procedure_offset);
+    library.AddMetadata(function, procedure_offset);
   }
 
   if (has_pragma_annotation) {
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index fe94596..5fa7d0e 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -10453,7 +10453,7 @@
     }
   } else {
     if (is_late() && !has_initializer()) {
-      Exceptions::ThrowLateInitializationError(String::Handle(name()));
+      Exceptions::ThrowLateFieldNotInitialized(String::Handle(name()));
       UNREACHABLE();
     }
 #if defined(DART_PRECOMPILED_RUNTIME)
@@ -10467,7 +10467,8 @@
   ASSERT(value.IsNull() || value.IsInstance());
   if (is_late() && is_final() &&
       (instance.GetField(*this) != Object::sentinel().raw())) {
-    Exceptions::ThrowLateInitializationError(String::Handle(name()));
+    Exceptions::ThrowLateFieldAssignedDuringInitialization(
+        String::Handle(name()));
     UNREACHABLE();
   }
   instance.SetField(*this, value);
@@ -10481,7 +10482,7 @@
     auto& value = Object::Handle();
     if (is_late()) {
       if (!has_initializer()) {
-        Exceptions::ThrowLateInitializationError(String::Handle(name()));
+        Exceptions::ThrowLateFieldNotInitialized(String::Handle(name()));
         UNREACHABLE();
       }
       value = EvaluateInitializer();
@@ -10489,7 +10490,8 @@
         return Error::Cast(value).raw();
       }
       if (is_final() && (StaticValue() != Object::sentinel().raw())) {
-        Exceptions::ThrowLateInitializationError(String::Handle(name()));
+        Exceptions::ThrowLateFieldAssignedDuringInitialization(
+            String::Handle(name()));
         UNREACHABLE();
       }
     } else {
@@ -11584,175 +11586,25 @@
   StoreNonPointer(&raw_ptr()->load_state_, LibraryLayout::kLoaded);
 }
 
-static StringPtr MakeClassMetaName(Thread* thread,
-                                   Zone* zone,
-                                   const Class& cls) {
-  return Symbols::FromConcat(thread, Symbols::At(),
-                             String::Handle(zone, cls.Name()));
-}
-
-static StringPtr MakeFieldMetaName(Thread* thread,
-                                   Zone* zone,
-                                   const Field& field) {
-  const String& cname = String::Handle(
-      zone,
-      MakeClassMetaName(thread, zone, Class::Handle(zone, field.Origin())));
-  GrowableHandlePtrArray<const String> pieces(zone, 3);
-  pieces.Add(cname);
-  pieces.Add(Symbols::At());
-  pieces.Add(String::Handle(zone, field.name()));
-  return Symbols::FromConcatAll(thread, pieces);
-}
-
-static StringPtr MakeFunctionMetaName(Thread* thread,
-                                      Zone* zone,
-                                      const Function& func) {
-  const String& cname = String::Handle(
-      zone,
-      MakeClassMetaName(thread, zone, Class::Handle(zone, func.origin())));
-  GrowableHandlePtrArray<const String> pieces(zone, 3);
-  pieces.Add(cname);
-  pieces.Add(Symbols::At());
-  pieces.Add(String::Handle(zone, func.name()));
-  return Symbols::FromConcatAll(thread, pieces);
-}
-
-static StringPtr MakeTypeParameterMetaName(Thread* thread,
-                                           Zone* zone,
-                                           const TypeParameter& param) {
-  const String& cname = String::Handle(
-      zone,
-      MakeClassMetaName(thread, zone,
-                        Class::Handle(zone, param.parameterized_class())));
-  GrowableHandlePtrArray<const String> pieces(zone, 3);
-  pieces.Add(cname);
-  pieces.Add(Symbols::At());
-  pieces.Add(String::Handle(zone, param.name()));
-  return Symbols::FromConcatAll(thread, pieces);
-}
-
-void Library::AddMetadata(const Object& owner,
-                          const String& name,
-                          TokenPosition token_pos,
+void Library::AddMetadata(const Object& declaration,
                           intptr_t kernel_offset) const {
 #if defined(DART_PRECOMPILED_RUNTIME)
   UNREACHABLE();
 #else
-  Thread* thread = Thread::Current();
-  ASSERT(thread->IsMutatorThread());
-  Zone* zone = thread->zone();
-  const String& metaname = String::Handle(zone, Symbols::New(thread, name));
-  const Field& field =
-      Field::Handle(zone, Field::NewTopLevel(metaname,
-                                             false,  // is_final
-                                             false,  // is_const
-                                             false,  // is_late
-                                             owner, token_pos, token_pos));
-  field.SetFieldType(Object::dynamic_type());
-  field.set_is_reflectable(false);
-  field.set_kernel_offset(kernel_offset);
-  thread->isolate_group()->RegisterStaticField(field, Array::empty_array());
-
-  GrowableObjectArray& metadata =
-      GrowableObjectArray::Handle(zone, this->metadata());
-  metadata.Add(field, Heap::kOld);
+  MetadataMap map(metadata());
+  map.UpdateOrInsert(declaration, Smi::Handle(Smi::New(kernel_offset)));
+  set_metadata(map.Release());
 #endif  // defined(DART_PRECOMPILED_RUNTIME)
 }
 
-void Library::AddClassMetadata(const Class& cls,
-                               const Object& tl_owner,
-                               TokenPosition token_pos,
-                               intptr_t kernel_offset) const {
-  Thread* thread = Thread::Current();
-  Zone* zone = thread->zone();
-  // We use the toplevel class as the owner of a class's metadata field because
-  // a class's metadata is in scope of the library, not the class.
-  AddMetadata(tl_owner,
-              String::Handle(zone, MakeClassMetaName(thread, zone, cls)),
-              token_pos, kernel_offset);
-}
-
-void Library::AddFieldMetadata(const Field& field,
-                               TokenPosition token_pos,
-                               intptr_t kernel_offset) const {
-  Thread* thread = Thread::Current();
-  Zone* zone = thread->zone();
-  const auto& owner = Object::Handle(zone, field.RawOwner());
-  const auto& name =
-      String::Handle(zone, MakeFieldMetaName(thread, zone, field));
-  AddMetadata(owner, name, token_pos, kernel_offset);
-}
-
-void Library::AddFunctionMetadata(const Function& func,
-                                  TokenPosition token_pos,
-                                  intptr_t kernel_offset) const {
-  Thread* thread = Thread::Current();
-  Zone* zone = thread->zone();
-  const auto& owner = Object::Handle(zone, func.RawOwner());
-  const auto& name =
-      String::Handle(zone, MakeFunctionMetaName(thread, zone, func));
-  AddMetadata(owner, name, token_pos, kernel_offset);
-}
-
-void Library::AddTypeParameterMetadata(const TypeParameter& param,
-                                       TokenPosition token_pos) const {
-  Thread* thread = Thread::Current();
-  Zone* zone = thread->zone();
-  const auto& owner = Class::Handle(zone, param.parameterized_class());
-  const auto& name =
-      String::Handle(zone, MakeTypeParameterMetaName(thread, zone, param));
-  AddMetadata(owner, name, token_pos, 0);
-}
-
-void Library::AddLibraryMetadata(const Object& tl_owner,
-                                 TokenPosition token_pos,
-                                 intptr_t kernel_offset) const {
-  AddMetadata(tl_owner, Symbols::TopLevel(), token_pos, kernel_offset);
-}
-
-StringPtr Library::MakeMetadataName(const Object& obj) const {
-  Thread* thread = Thread::Current();
-  Zone* zone = thread->zone();
-  if (obj.IsClass()) {
-    return MakeClassMetaName(thread, zone, Class::Cast(obj));
-  } else if (obj.IsField()) {
-    return MakeFieldMetaName(thread, zone, Field::Cast(obj));
-  } else if (obj.IsFunction()) {
-    return MakeFunctionMetaName(thread, zone, Function::Cast(obj));
-  } else if (obj.IsLibrary()) {
-    return Symbols::TopLevel().raw();
-  } else if (obj.IsTypeParameter()) {
-    return MakeTypeParameterMetaName(thread, zone, TypeParameter::Cast(obj));
-  }
-  UNIMPLEMENTED();
-  return String::null();
-}
-
-FieldPtr Library::GetMetadataField(const String& metaname) const {
-  const GrowableObjectArray& metadata =
-      GrowableObjectArray::Handle(this->metadata());
-  Field& entry = Field::Handle();
-  String& entryname = String::Handle();
-  intptr_t num_entries = metadata.Length();
-  for (intptr_t i = 0; i < num_entries; i++) {
-    entry ^= metadata.At(i);
-    entryname = entry.name();
-    if (entryname.Equals(metaname)) {
-      return entry.raw();
-    }
-  }
-  return Field::null();
-}
-
-ObjectPtr Library::GetMetadata(const Object& obj) const {
+ObjectPtr Library::GetMetadata(const Object& declaration) const {
 #if defined(DART_PRECOMPILED_RUNTIME)
   return Object::empty_array().raw();
 #else
-  if (!obj.IsClass() && !obj.IsField() && !obj.IsFunction() &&
-      !obj.IsLibrary() && !obj.IsTypeParameter()) {
-    UNREACHABLE();
-  }
-  if (obj.IsLibrary()) {
+  RELEASE_ASSERT(declaration.IsClass() || declaration.IsField() ||
+                 declaration.IsFunction() || declaration.IsLibrary() ||
+                 declaration.IsTypeParameter() || declaration.IsNamespace());
+  if (declaration.IsLibrary()) {
     // Ensure top-level class is loaded as it may contain annotations of
     // a library.
     const auto& cls = Class::Handle(toplevel_class());
@@ -11760,31 +11612,36 @@
       cls.EnsureDeclarationLoaded();
     }
   }
-  const String& metaname = String::Handle(MakeMetadataName(obj));
-  Field& field = Field::Handle(GetMetadataField(metaname));
-  if (field.IsNull()) {
+  Object& value = Object::Handle();
+  {
+    MetadataMap map(metadata());
+    value = map.GetOrNull(declaration);
+    set_metadata(map.Release());
+  }
+  if (value.IsNull()) {
     // There is no metadata for this object.
     return Object::empty_array().raw();
   }
-  Object& metadata = Object::Handle(field.StaticValue());
-  if (metadata.raw() == Object::empty_array().raw()) {
-    ASSERT(field.kernel_offset() > 0);
-    metadata = kernel::EvaluateMetadata(
-        field, /* is_annotations_offset = */ obj.IsLibrary());
-    if (metadata.IsArray() || metadata.IsNull()) {
-      ASSERT(metadata.raw() != Object::empty_array().raw());
-      if (!Compiler::IsBackgroundCompilation()) {
-        field.SetStaticValue(
-            metadata.IsNull() ? Object::null_array() : Array::Cast(metadata),
-            true);
-      }
+  if (!value.IsSmi()) {
+    // Metadata is already evaluated.
+    ASSERT(value.IsArray());
+    return value.raw();
+  }
+  intptr_t kernel_offset = Smi::Cast(value).Value();
+  ASSERT(kernel_offset > 0);
+  value = kernel::EvaluateMetadata(
+      *this, kernel_offset,
+      /* is_annotations_offset = */ declaration.IsLibrary() ||
+          declaration.IsNamespace());
+  if (value.IsArray() || value.IsNull()) {
+    ASSERT(value.raw() != Object::empty_array().raw());
+    if (!Compiler::IsBackgroundCompilation()) {
+      MetadataMap map(metadata());
+      map.UpdateOrInsert(declaration, value);
+      set_metadata(map.Release());
     }
   }
-  if (metadata.IsNull()) {
-    // Metadata field exists in order to reference extended metadata.
-    return Object::empty_array().raw();
-  }
-  return metadata.raw();
+  return value.raw();
 #endif  // defined(DART_PRECOMPILED_RUNTIME)
 }
 
@@ -12331,7 +12188,7 @@
     import = ImportAt(i);
     obj = import.Lookup(name);
     if (!obj.IsNull()) {
-      import_lib = import.library();
+      import_lib = import.target();
       import_lib_url = import_lib.url();
       if (found_obj.raw() != obj.raw()) {
         if (first_import_lib_url.IsNull() ||
@@ -12455,7 +12312,7 @@
   raw_ptr()->set_dependencies(deps.raw());
 }
 
-void Library::set_metadata(const GrowableObjectArray& value) const {
+void Library::set_metadata(const Array& value) const {
   raw_ptr()->set_metadata(value.raw());
 }
 
@@ -12464,7 +12321,7 @@
   if (import.IsNull()) {
     return Library::null();
   }
-  return import.library();
+  return import.target();
 }
 
 NamespacePtr Library::ImportAt(intptr_t index) const {
@@ -12486,7 +12343,7 @@
   for (int i = 0; i < imports.Length(); ++i) {
     ns = Namespace::RawCast(imports.At(i));
     if (ns.IsNull()) continue;
-    lib = ns.library();
+    lib = ns.target();
     url = lib.url();
     if (url.StartsWith(Symbols::DartExtensionScheme())) {
       native_import_count++;
@@ -12497,7 +12354,7 @@
   for (int i = 0, j = 0; i < imports.Length(); ++i) {
     ns = Namespace::RawCast(imports.At(i));
     if (ns.IsNull()) continue;
-    lib = ns.library();
+    lib = ns.target();
     url = lib.url();
     if (url.StartsWith(Symbols::DartExtensionScheme())) {
       new_imports.SetAt(j++, ns);
@@ -12615,10 +12472,11 @@
   result.raw_ptr()->set_resolved_names(Array::null());
   result.raw_ptr()->set_exported_names(Array::null());
   result.raw_ptr()->set_dictionary(Object::empty_array().raw());
-  GrowableObjectArray& list = GrowableObjectArray::Handle(zone);
-  list = GrowableObjectArray::New(4, Heap::kOld);
-  result.raw_ptr()->set_metadata(list.raw());
+  Array& array = Array::Handle(zone);
+  array = HashTables::New<MetadataMap>(4, Heap::kOld);
+  result.raw_ptr()->set_metadata(array.raw());
   result.raw_ptr()->set_toplevel_class(Class::null());
+  GrowableObjectArray& list = GrowableObjectArray::Handle(zone);
   list = GrowableObjectArray::New(Object::empty_array(), Heap::kOld);
   result.raw_ptr()->set_used_scripts(list.raw());
   result.raw_ptr()->set_imports(Object::empty_array().raw());
@@ -12648,9 +12506,9 @@
   if (import_core_lib) {
     const Library& core_lib = Library::Handle(zone, Library::CoreLibrary());
     ASSERT(!core_lib.IsNull());
-    const Namespace& ns = Namespace::Handle(
-        zone,
-        Namespace::New(core_lib, Object::null_array(), Object::null_array()));
+    const Namespace& ns =
+        Namespace::Handle(zone, Namespace::New(core_lib, Object::null_array(),
+                                               Object::null_array(), result));
     result.AddImport(ns);
   }
   return result.raw();
@@ -13275,7 +13133,7 @@
     const Array& imports = Array::Handle(this->imports());
     Namespace& import = Namespace::Handle();
     import ^= imports.At(index);
-    return import.library();
+    return import.target();
   }
   return Library::null();
 }
@@ -13345,59 +13203,8 @@
   return prefix.ToCString();
 }
 
-void Namespace::set_metadata_field(const Field& value) const {
-  raw_ptr()->set_metadata_field(value.raw());
-}
-
-void Namespace::AddMetadata(const Object& owner,
-                            TokenPosition token_pos,
-                            intptr_t kernel_offset) {
-  auto thread = Thread::Current();
-  auto zone = thread->zone();
-  auto isolate_group = thread->isolate_group();
-  ASSERT(Field::Handle(zone, metadata_field()).IsNull());
-  Field& field =
-      Field::Handle(zone, Field::NewTopLevel(Symbols::TopLevel(),
-                                             false,  // is_final
-                                             false,  // is_const
-                                             false,  // is_late
-                                             owner, token_pos, token_pos));
-  field.set_is_reflectable(false);
-  field.SetFieldType(Object::dynamic_type());
-  field.set_kernel_offset(kernel_offset);
-  isolate_group->RegisterStaticField(field, Array::empty_array());
-  set_metadata_field(field);
-}
-
-ObjectPtr Namespace::GetMetadata() const {
-#if defined(DART_PRECOMPILED_RUNTIME)
-  return Object::empty_array().raw();
-#else
-  Field& field = Field::Handle(metadata_field());
-  if (field.IsNull()) {
-    // There is no metadata for this object.
-    return Object::empty_array().raw();
-  }
-  Object& metadata = Object::Handle();
-  metadata = field.StaticValue();
-  if (field.StaticValue() == Object::empty_array().raw()) {
-    if (field.kernel_offset() > 0) {
-      metadata =
-          kernel::EvaluateMetadata(field, /* is_annotations_offset = */ true);
-    } else {
-      UNREACHABLE();
-    }
-    if (metadata.IsArray()) {
-      ASSERT(Array::Cast(metadata).raw() != Object::empty_array().raw());
-      field.SetStaticValue(Array::Cast(metadata), true);
-    }
-  }
-  return metadata.raw();
-#endif  // defined(DART_PRECOMPILED_RUNTIME)
-}
-
 const char* Namespace::ToCString() const {
-  const Library& lib = Library::Handle(library());
+  const Library& lib = Library::Handle(target());
   return OS::SCreate(Thread::Current()->zone(), "Namespace for library '%s'",
                      lib.ToCString());
 }
@@ -13451,7 +13258,7 @@
 ObjectPtr Namespace::Lookup(const String& name,
                             ZoneGrowableArray<intptr_t>* trail) const {
   Zone* zone = Thread::Current()->zone();
-  const Library& lib = Library::Handle(zone, library());
+  const Library& lib = Library::Handle(zone, target());
 
   if (trail != NULL) {
     // Look for cycle in reexport graph.
@@ -13512,15 +13319,17 @@
   return static_cast<NamespacePtr>(raw);
 }
 
-NamespacePtr Namespace::New(const Library& library,
+NamespacePtr Namespace::New(const Library& target,
                             const Array& show_names,
-                            const Array& hide_names) {
+                            const Array& hide_names,
+                            const Library& owner) {
   ASSERT(show_names.IsNull() || (show_names.Length() > 0));
   ASSERT(hide_names.IsNull() || (hide_names.Length() > 0));
   const Namespace& result = Namespace::Handle(Namespace::New());
-  result.raw_ptr()->set_library(library.raw());
+  result.raw_ptr()->set_target(target.raw());
   result.raw_ptr()->set_show_names(show_names.raw());
   result.raw_ptr()->set_hide_names(hide_names.raw());
+  result.raw_ptr()->set_owner(owner.raw());
   return result.raw();
 }
 
@@ -25066,9 +24875,13 @@
   const Library& lib = Library::Handle(cls.library());
   switch (kind()) {
     case FunctionLayout::kRegularFunction:
-    case FunctionLayout::kImplicitClosureFunction:
       return dart::VerifyEntryPoint(lib, *this, *this,
                                     {EntryPointPragma::kGetterOnly});
+    case FunctionLayout::kImplicitClosureFunction: {
+      const Function& parent = Function::Handle(parent_function());
+      return dart::VerifyEntryPoint(lib, parent, parent,
+                                    {EntryPointPragma::kGetterOnly});
+    }
     default:
       UNREACHABLE();
   }
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 59377eb..ac00550 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -4738,22 +4738,8 @@
 
   void AddExport(const Namespace& ns) const;
 
-  void AddClassMetadata(const Class& cls,
-                        const Object& tl_owner,
-                        TokenPosition token_pos,
-                        intptr_t kernel_offset) const;
-  void AddFieldMetadata(const Field& field,
-                        TokenPosition token_pos,
-                        intptr_t kernel_offset) const;
-  void AddFunctionMetadata(const Function& func,
-                           TokenPosition token_pos,
-                           intptr_t kernel_offset) const;
-  void AddLibraryMetadata(const Object& tl_owner,
-                          TokenPosition token_pos,
-                          intptr_t kernel_offset) const;
-  void AddTypeParameterMetadata(const TypeParameter& param,
-                                TokenPosition token_pos) const;
-  ObjectPtr GetMetadata(const Object& obj) const;
+  void AddMetadata(const Object& declaration, intptr_t kernel_offset) const;
+  ObjectPtr GetMetadata(const Object& declaration) const;
 
   // Tries to finds a @pragma annotation on [object].
   //
@@ -4978,8 +4964,8 @@
   void set_flags(uint8_t flags) const;
   bool HasExports() const;
   ArrayPtr loaded_scripts() const { return raw_ptr()->loaded_scripts(); }
-  GrowableObjectArrayPtr metadata() const { return raw_ptr()->metadata(); }
-  void set_metadata(const GrowableObjectArray& value) const;
+  ArrayPtr metadata() const { return raw_ptr()->metadata(); }
+  void set_metadata(const Array& value) const;
   ArrayPtr dictionary() const { return raw_ptr()->dictionary(); }
   void InitClassDictionary() const;
 
@@ -5007,13 +4993,6 @@
 
   void AllocatePrivateKey() const;
 
-  StringPtr MakeMetadataName(const Object& obj) const;
-  FieldPtr GetMetadataField(const String& metaname) const;
-  void AddMetadata(const Object& owner,
-                   const String& name,
-                   TokenPosition token_pos,
-                   intptr_t kernel_offset) const;
-
   FINAL_HEAP_OBJECT_IMPLEMENTATION(Library, Object);
 
   friend class Bootstrap;
@@ -5031,14 +5010,10 @@
 // the show/hide combinators.
 class Namespace : public Object {
  public:
-  LibraryPtr library() const { return raw_ptr()->library(); }
+  LibraryPtr target() const { return raw_ptr()->target(); }
   ArrayPtr show_names() const { return raw_ptr()->show_names(); }
   ArrayPtr hide_names() const { return raw_ptr()->hide_names(); }
-
-  void AddMetadata(const Object& owner,
-                   TokenPosition token_pos,
-                   intptr_t kernel_offset = 0);
-  ObjectPtr GetMetadata() const;
+  LibraryPtr owner() const { return raw_ptr()->owner(); }
 
   static intptr_t InstanceSize() {
     return RoundedAllocationSize(sizeof(NamespaceLayout));
@@ -5050,14 +5025,12 @@
 
   static NamespacePtr New(const Library& library,
                           const Array& show_names,
-                          const Array& hide_names);
+                          const Array& hide_names,
+                          const Library& owner);
 
  private:
   static NamespacePtr New();
 
-  FieldPtr metadata_field() const { return raw_ptr()->metadata_field(); }
-  void set_metadata_field(const Field& value) const;
-
   FINAL_HEAP_OBJECT_IMPLEMENTATION(Namespace, Object);
   friend class Class;
   friend class Precompiler;
diff --git a/runtime/vm/object_service.cc b/runtime/vm/object_service.cc
index 08bfa23..1dfe634 100644
--- a/runtime/vm/object_service.cc
+++ b/runtime/vm/object_service.cc
@@ -519,7 +519,7 @@
       jsdep.AddProperty("isDeferred", false);
       jsdep.AddProperty("isExport", false);
       jsdep.AddProperty("isImport", true);
-      target = ns.library();
+      target = ns.target();
       jsdep.AddProperty("target", target);
     }
 
@@ -533,7 +533,7 @@
       jsdep.AddProperty("isDeferred", false);
       jsdep.AddProperty("isExport", true);
       jsdep.AddProperty("isImport", false);
-      target = ns.library();
+      target = ns.target();
       jsdep.AddProperty("target", target);
     }
 
@@ -559,7 +559,7 @@
             prefix_name = prefix.name();
             ASSERT(!prefix_name.IsNull());
             jsdep.AddProperty("prefix", prefix_name.ToCString());
-            target = ns.library();
+            target = ns.target();
             jsdep.AddProperty("target", target);
           }
         }
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h
index 0f9c283..f5ff206 100644
--- a/runtime/vm/raw_object.h
+++ b/runtime/vm/raw_object.h
@@ -1409,8 +1409,7 @@
   POINTER_FIELD(StringPtr, url)
   POINTER_FIELD(StringPtr, private_key)
   POINTER_FIELD(ArrayPtr, dictionary)  // Top-level names in this library.
-  POINTER_FIELD(GrowableObjectArrayPtr,
-                metadata)  // Metadata on classes, methods etc.
+  POINTER_FIELD(ArrayPtr, metadata)    // Metadata on classes, methods etc.
   POINTER_FIELD(ClassPtr,
                 toplevel_class)  // Class containing top-level elements.
   POINTER_FIELD(GrowableObjectArrayPtr, used_scripts)
@@ -1462,14 +1461,12 @@
 class NamespaceLayout : public ObjectLayout {
   RAW_HEAP_OBJECT_IMPLEMENTATION(Namespace);
 
-  VISIT_FROM(ObjectPtr, library)
-  POINTER_FIELD(LibraryPtr, library)   // library with name dictionary.
+  VISIT_FROM(ObjectPtr, target)
+  POINTER_FIELD(LibraryPtr, target)    // library with name dictionary.
   POINTER_FIELD(ArrayPtr, show_names)  // list of names that are exported.
   POINTER_FIELD(ArrayPtr, hide_names)  // list of names that are hidden.
-  POINTER_FIELD(FieldPtr,
-                metadata_field)  // remembers the token pos of metadata if any,
-                                 // and the metadata values if computed.
-  VISIT_TO(ObjectPtr, metadata_field)
+  POINTER_FIELD(LibraryPtr, owner)
+  VISIT_TO(ObjectPtr, owner)
   ObjectPtr* to_snapshot(Snapshot::Kind kind) { return to(); }
 };
 
diff --git a/runtime/vm/raw_object_fields.cc b/runtime/vm/raw_object_fields.cc
index cf5625b..103611e 100644
--- a/runtime/vm/raw_object_fields.cc
+++ b/runtime/vm/raw_object_fields.cc
@@ -75,10 +75,10 @@
   F(Library, resolved_names_)                                                  \
   F(Library, exported_names_)                                                  \
   F(Library, loaded_scripts_)                                                  \
-  F(Namespace, library_)                                                       \
+  F(Namespace, target_)                                                        \
   F(Namespace, show_names_)                                                    \
   F(Namespace, hide_names_)                                                    \
-  F(Namespace, metadata_field_)                                                \
+  F(Namespace, owner_)                                                         \
   F(KernelProgramInfo, string_offsets_)                                        \
   F(KernelProgramInfo, string_data_)                                           \
   F(KernelProgramInfo, canonical_names_)                                       \
diff --git a/runtime/vm/runtime_entry.cc b/runtime/vm/runtime_entry.cc
index baf79d3..0a13543 100644
--- a/runtime/vm/runtime_entry.cc
+++ b/runtime/vm/runtime_entry.cc
@@ -3161,9 +3161,15 @@
   arguments.SetReturn(result);
 }
 
-DEFINE_RUNTIME_ENTRY(LateInitializationError, 1) {
+DEFINE_RUNTIME_ENTRY(LateFieldAssignedDuringInitializationError, 1) {
   const Field& field = Field::CheckedHandle(zone, arguments.ArgAt(0));
-  Exceptions::ThrowLateInitializationError(String::Handle(field.name()));
+  Exceptions::ThrowLateFieldAssignedDuringInitialization(
+      String::Handle(field.name()));
+}
+
+DEFINE_RUNTIME_ENTRY(LateFieldNotInitializedError, 1) {
+  const Field& field = Field::CheckedHandle(zone, arguments.ArgAt(0));
+  Exceptions::ThrowLateFieldNotInitialized(String::Handle(field.name()));
 }
 
 DEFINE_RUNTIME_ENTRY(NotLoaded, 0) {
diff --git a/runtime/vm/runtime_entry_list.h b/runtime/vm/runtime_entry_list.h
index 40f5bd8..34ac296 100644
--- a/runtime/vm/runtime_entry_list.h
+++ b/runtime/vm/runtime_entry_list.h
@@ -50,7 +50,8 @@
   V(UpdateFieldCid)                                                            \
   V(InitInstanceField)                                                         \
   V(InitStaticField)                                                           \
-  V(LateInitializationError)                                                   \
+  V(LateFieldAssignedDuringInitializationError)                                \
+  V(LateFieldNotInitializedError)                                              \
   V(CompileFunction)                                                           \
   V(SwitchableCallMiss)                                                        \
   V(NotLoaded)
diff --git a/runtime/vm/symbols.h b/runtime/vm/symbols.h
index 4ea837a..1e408f1 100644
--- a/runtime/vm/symbols.h
+++ b/runtime/vm/symbols.h
@@ -64,7 +64,6 @@
   V(Current, "current")                                                        \
   V(CurrentContextVar, ":current_context_var")                                 \
   V(CyclicInitializationError, "CyclicInitializationError")                    \
-  V(LateInitializationError, "_LateInitializationError")                       \
   V(DartAsync, "dart:async")                                                   \
   V(DartCollection, "dart:collection")                                         \
   V(DartCore, "dart:core")                                                     \
@@ -94,6 +93,8 @@
   V(Default, "Default")                                                        \
   V(DefaultLabel, ":L")                                                        \
   V(DotCreate, "._create")                                                     \
+  V(DotFieldNI, ".fieldNI")                                                    \
+  V(DotFieldADI, ".fieldADI")                                                  \
   V(DotRange, ".range")                                                        \
   V(DotUnder, "._")                                                            \
   V(DotValue, ".value")                                                        \
@@ -196,6 +197,7 @@
   V(IteratorParameter, ":iterator")                                            \
   V(KernelProgramInfo, "KernelProgramInfo")                                    \
   V(LanguageError, "LanguageError")                                            \
+  V(LateError, "LateError")                                                    \
   V(LeftShiftOperator, "<<")                                                   \
   V(Length, "length")                                                          \
   V(LessEqualOperator, "<=")                                                   \
diff --git a/sdk/lib/_internal/vm/lib/errors_patch.dart b/sdk/lib/_internal/vm/lib/errors_patch.dart
index 75776ec..a33b803 100644
--- a/sdk/lib/_internal/vm/lib/errors_patch.dart
+++ b/sdk/lib/_internal/vm/lib/errors_patch.dart
@@ -44,8 +44,8 @@
 
   static _doThrowNew(int assertionStart, int assertionEnd, Object? message)
       native "AssertionError_throwNew";
-  static _doThrowNewSource(String failedAssertion, int line, int column, Object? message)
-      native "AssertionError_throwNewSource";
+  static _doThrowNewSource(String failedAssertion, int line, int column,
+      Object? message) native "AssertionError_throwNewSource";
 
   @pragma("vm:entry-point", "call")
   static _evaluateAssertion(condition) {
@@ -494,18 +494,3 @@
 
   toString() => "Error: field '$_name' is already initialized.";
 }
-
-class _LateInitializationError extends Error
-    implements LateInitializationError {
-  @pragma("vm:entry-point")
-  _LateInitializationError(this._name);
-
-  @pragma("vm:entry-point")
-  static void _throwNew(String name) {
-    throw _LateInitializationError(name);
-  }
-
-  String toString() => "LateInitializationError: $_name";
-
-  final String _name;
-}
diff --git a/sdk/lib/_internal/vm/lib/internal_patch.dart b/sdk/lib/_internal/vm/lib/internal_patch.dart
index 1566701..24f9461 100644
--- a/sdk/lib/_internal/vm/lib/internal_patch.dart
+++ b/sdk/lib/_internal/vm/lib/internal_patch.dart
@@ -195,3 +195,21 @@
 
 @patch
 bool isSentinel(dynamic value) => throw UnsupportedError('isSentinel');
+
+@patch
+class LateError {
+  @pragma("vm:entry-point")
+  static _throwFieldAlreadyInitialized(String fieldName) {
+    throw new LateError.fieldAI(fieldName);
+  }
+
+  @pragma("vm:entry-point")
+  static _throwLocalNotInitialized(String localName) {
+    throw new LateError.localNI(localName);
+  }
+
+  @pragma("vm:entry-point")
+  static _throwLocalAlreadyInitialized(String localName) {
+    throw new LateError.localAI(localName);
+  }
+}
diff --git a/sdk/lib/core/uri.dart b/sdk/lib/core/uri.dart
index 998cb83..143ad63 100644
--- a/sdk/lib/core/uri.dart
+++ b/sdk/lib/core/uri.dart
@@ -609,7 +609,8 @@
 
   /// Returns a hash code computed as `toString().hashCode`.
   ///
-  /// This guarantees that URIs with the same normalized
+  /// This guarantees that URIs with the same normalized string representation
+  /// have the same hash code.
   int get hashCode;
 
   /// A URI is equal to another URI with the same normalized representation.
diff --git a/sdk/lib/internal/errors.dart b/sdk/lib/internal/errors.dart
index 5f8ca81..3fe6e40 100644
--- a/sdk/lib/internal/errors.dart
+++ b/sdk/lib/internal/errors.dart
@@ -12,10 +12,12 @@
   // The constructor names have been deliberately shortened to reduce the size
   // of unminified code as used by DDC.
 
+  @pragma("vm:entry-point")
   LateError.fieldADI(String fieldName)
       : _message =
             "Field '$fieldName' has been assigned during initialization.";
 
+  @pragma("vm:entry-point")
   LateError.fieldNI(String fieldName)
       : _message = "Field '${fieldName}' has not been initialized.";
 
diff --git a/tests/language/language.status b/tests/language/language.status
index b8da9a3..5739de1 100644
--- a/tests/language/language.status
+++ b/tests/language/language.status
@@ -2,6 +2,9 @@
 # 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.
 
+[ $builder_tag == obfuscated ]
+nnbd/syntax/late_modifier_runtime_error_test: SkipByDesign # Names are obfuscated in error messages
+
 [ $compiler != dart2analyzer ]
 switch/case_warn_test: Skip # Analyzer only, see language_analyzer2.status
 
diff --git a/tests/language/nnbd/syntax/late_modifier_runtime_error_test.dart b/tests/language/nnbd/syntax/late_modifier_runtime_error_test.dart
new file mode 100644
index 0000000..851d225
--- /dev/null
+++ b/tests/language/nnbd/syntax/late_modifier_runtime_error_test.dart
@@ -0,0 +1,112 @@
+// Copyright (c) 2020, 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 'package:expect/expect.dart';
+
+class A {
+  static late int sf1;
+  static late final int sf2;
+  static late final int sf3 = recursiveInitSf3();
+
+  static bool doRecursiveInitSf3 = true;
+  static int recursiveInitSf3() {
+    if (doRecursiveInitSf3) {
+      doRecursiveInitSf3 = false;
+      return sf3; // Trigger initialization recursively.
+    }
+    return 3;
+  }
+
+  late int f1;
+  late final int f2;
+  late final int f3 = recursiveInitF3();
+
+  bool doRecursiveInitF3 = true;
+  int recursiveInitF3() {
+    if (doRecursiveInitF3) {
+      doRecursiveInitF3 = false;
+      return f3; // Trigger initialization recursively.
+    }
+    return 3;
+  }
+}
+
+bool isValidError(error, String message) {
+  if (error is LateInitializationError) {
+    Expect.equals('LateInitializationError: $message', error.toString());
+    return true;
+  }
+  return false;
+}
+
+main() {
+  // Static fields.
+
+  Expect.throws(() => A.sf1,
+      (e) => isValidError(e, "Field 'sf1' has not been initialized."));
+  Expect.throws(() => A.sf2,
+      (e) => isValidError(e, "Field 'sf2' has not been initialized."));
+  A.sf2 = 42;
+  Expect.throws(() {
+    A.sf2 = 2;
+  }, (e) => isValidError(e, "Field 'sf2' has already been initialized."));
+  Expect.throws(
+      () => A.sf3,
+      (e) => isValidError(
+          e, "Field 'sf3' has been assigned during initialization."));
+
+  // Instance fields.
+
+  A obj = A();
+  Expect.throws(() => obj.f1,
+      (e) => isValidError(e, "Field 'f1' has not been initialized."));
+  Expect.throws(() => obj.f2,
+      (e) => isValidError(e, "Field 'f2' has not been initialized."));
+  obj.f2 = 42;
+  Expect.throws(() {
+    obj.f2 = 2;
+  }, (e) => isValidError(e, "Field 'f2' has already been initialized."));
+  Expect.throws(
+      () => obj.f3,
+      (e) => isValidError(
+          e, "Field 'f3' has been assigned during initialization."));
+
+  // Local variables.
+  late int local1;
+  late final int local2;
+
+  late int Function() recursiveInitLocal3;
+  late final int local3 = recursiveInitLocal3();
+
+  bool doRecursiveInitLocal3 = true;
+  recursiveInitLocal3 = () {
+    if (doRecursiveInitLocal3) {
+      doRecursiveInitLocal3 = false;
+      return local3; // Trigger initialization recursively.
+    }
+    return 3;
+  };
+
+  // Avoid compile-time error "Late variable 'local1' without initializer is
+  // definitely unassigned."
+  if (int.parse('1') == 2) {
+    local1 = -1;
+  }
+
+  Expect.throws(() => local1,
+      (e) => isValidError(e, "Local 'local1' has not been initialized."));
+  Expect.throws(() => local2,
+      (e) => isValidError(e, "Local 'local2' has not been initialized."));
+  // Assignment is conditional to avoid compile-time error "Late final variable
+  // 'local2' definitely assigned."
+  if (int.parse('1') == 1) {
+    local2 = 42;
+  }
+  Expect.throws(() {
+    local2 = 2;
+  }, (e) => isValidError(e, "Local 'local2' has already been initialized."));
+  // Uncomment after https://github.com/dart-lang/sdk/issues/44372 is fixed.
+  // Expect.throws(() => local3,
+  //     (e) => isValidError(e, "Local 'local3' has already been initialized."));
+}
diff --git a/tools/VERSION b/tools/VERSION
index d8d0e65..1fe6ee9 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 12
 PATCH 0
-PRERELEASE 108
+PRERELEASE 109
 PRERELEASE_PATCH 0
\ No newline at end of file