Version 2.13.0-162.0.dev

Merge commit 'e7d3a6027cd86e29f04f6137a65e67305e48b862' into 'dev'
diff --git a/.dart_tool/package_config.json b/.dart_tool/package_config.json
index 1b1635e..80d3fe1 100644
--- a/.dart_tool/package_config.json
+++ b/.dart_tool/package_config.json
@@ -11,7 +11,7 @@
     "constraint, update this by running tools/generate_package_config.dart."
   ],
   "configVersion": 2,
-  "generated": "2021-03-19T12:24:33.467679",
+  "generated": "2021-03-20T01:55:31.903271",
   "generator": "tools/generate_package_config.dart",
   "packages": [
     {
diff --git a/DEPS b/DEPS
index a2adf45..dc039c0 100644
--- a/DEPS
+++ b/DEPS
@@ -44,7 +44,7 @@
   # co19 is a cipd package. Use update.sh in tests/co19[_2] to update these
   # hashes. It requires access to the dart-build-access group, which EngProd
   # has.
-  "co19_rev": "ae818220b12ec9c2470519db2c7167cbe4745e12",
+  "co19_rev": "fddb1dce948cec277bf3dc23b45ee95e761b89fe",
   "co19_2_rev": "cf6eed0535e45413672bb5bb6e65df9f59846372",
 
   # The internal benchmarks to use. See go/dart-benchmarks-internal
@@ -101,7 +101,7 @@
   "dart_style_tag": "2cf810073e0cc7e7ea05d3de51830e6fa6d62924",
 
   "chromedriver_tag": "83.0.4103.39",
-  "browser_launcher_rev": "74949f0c599095e6fac3cb4581ed4769167576c7",
+  "browser_launcher_rev": "12ab9f351a44ac803de9bc17bb2180bb312a9dd7",
   "dartdoc_rev" : "174021f3d76c2a8500b54977c80f32c5bbc099f1",
   "ffi_rev": "f3346299c55669cc0db48afae85b8110088bf8da",
   "fixnum_rev": "16d3890c6dc82ca629659da1934e412292508bba",
diff --git a/pkg/analyzer/test/src/summary/resynthesize_common.dart b/pkg/analyzer/test/src/summary/resynthesize_common.dart
index e4b74af..47c3f8b 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_common.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_common.dart
@@ -43,7 +43,7 @@
         DartUriResolver(sdk),
         PackageMapUriResolver(resourceProvider, {
           'test': [
-            resourceProvider.getFolder('/home/test/lib'),
+            getFolder('/home/test/lib'),
           ],
         }),
         ResourceUriResolver(resourceProvider),
diff --git a/pkg/analyzer/test/src/workspace/bazel_watcher_test.dart b/pkg/analyzer/test/src/workspace/bazel_watcher_test.dart
index 5d9f119..16df3e4 100644
--- a/pkg/analyzer/test/src/workspace/bazel_watcher_test.dart
+++ b/pkg/analyzer/test/src/workspace/bazel_watcher_test.dart
@@ -160,10 +160,10 @@
     _MockPollTrigger? trigger1;
     _MockPollTrigger? trigger2;
     var triggerFactory = (String workspace) {
-      if (workspace == '/workspace1') {
+      if (workspace == convertPath('/workspace1')) {
         trigger1 = _MockPollTrigger();
         return trigger1!;
-      } else if (workspace == '/workspace2') {
+      } else if (workspace == convertPath('/workspace2')) {
         trigger2 = _MockPollTrigger();
         return trigger2!;
       } else {
diff --git a/pkg/compiler/lib/src/ir/static_type.dart b/pkg/compiler/lib/src/ir/static_type.dart
index cb063b6..fd85772 100644
--- a/pkg/compiler/lib/src/ir/static_type.dart
+++ b/pkg/compiler/lib/src/ir/static_type.dart
@@ -1012,16 +1012,9 @@
     // effectively final variable types and type promotion.
     ir.DartType functionType = _computeInstanceInvocationType(
         receiverType, interfaceTarget, node.arguments, argumentTypes);
-    if (functionType != node.functionType) {
+    if (functionType is ir.FunctionType && functionType != node.functionType) {
       node.functionType = functionType;
-      // TODO(johnniwinther): To provide the static guarantee that arguments
-      // of a statically typed call have been checked against the parameter
-      // types we need to call [_updateMethodInvocationTarget]. This can create
-      // uses of type variables are not registered with the closure model so
-      // we skip it for now. Note that this invariant is not currently used
-      // in later phases since it wasn't provided for function invocations in
-      // the old method invocation encoding.
-      //_updateMethodInvocationTarget(node, argumentTypes, functionType);
+      _updateMethodInvocationTarget(node, argumentTypes, functionType);
     }
     ir.DartType returnType = _getFunctionReturnType(functionType);
     receiverType = _narrowInstanceReceiver(node.interfaceTarget, receiverType);
@@ -1046,10 +1039,14 @@
           (interfaceTarget is ir.Procedure && interfaceTarget.isGetter)) {
         // This should actually be a function invocation of an instance get but
         // this doesn't work for invocation of js-interop properties. We
-        // therefore use [ir.MethodInvocation] instead.
-        // TODO(johnniwinther): Use [ir.InstanceGetterInvocation] instead.
-        replacement = ir.MethodInvocation(
-            node.receiver, node.name, node.arguments, interfaceTarget)
+        // therefore use [ir.InstanceGetterInvocation] instead.
+        replacement = ir.InstanceGetterInvocation(
+            ir.InstanceAccessKind.Instance,
+            node.receiver,
+            node.name,
+            node.arguments,
+            interfaceTarget: interfaceTarget,
+            functionType: functionType is ir.FunctionType ? functionType : null)
           ..fileOffset = node.fileOffset;
       } else {
         replacement = ir.InstanceInvocation(ir.InstanceAccessKind.Instance,
diff --git a/pkg/compiler/test/analyses/analyze_test.dart b/pkg/compiler/test/analyses/analyze_test.dart
index b0f6832..affe1b1 100644
--- a/pkg/compiler/test/analyses/analyze_test.dart
+++ b/pkg/compiler/test/analyses/analyze_test.dart
@@ -4,11 +4,16 @@
 
 // @dart = 2.7
 
+import 'dart:io' show exitCode;
+
 import "package:testing/src/run_tests.dart" as testing show main;
 
-main() {
+main() async {
   // This method is async, but keeps a port open to prevent the VM from exiting
   // prematurely.
-  return testing.main(
+  await testing.main(
       <String>["--config=pkg/compiler/testing.json", "--verbose", "analyze"]);
+  if (exitCode != 0) {
+    throw "Exit-code was $exitCode!";
+  }
 }
diff --git a/pkg/dev_compiler/bin/dartdevc.dart b/pkg/dev_compiler/bin/dartdevc.dart
index 87da5bb..4d8d197 100755
--- a/pkg/dev_compiler/bin/dartdevc.dart
+++ b/pkg/dev_compiler/bin/dartdevc.dart
@@ -32,20 +32,8 @@
   } else if (parsedArgs.isBatch) {
     await runBatch(parsedArgs);
   } else if (parsedArgs.isExpressionCompiler) {
-    if (sendPort != null) {
-      var receivePort = ReceivePort();
-      sendPort.send(receivePort.sendPort);
-      var worker = await ExpressionCompilerWorker.createFromArgs(
-          parsedArgs.rest,
-          requestStream: receivePort.cast<Map<String, dynamic>>(),
-          sendResponse: sendPort.send);
-      await worker.start();
-      receivePort.close();
-    } else {
-      var worker =
-          await ExpressionCompilerWorker.createFromArgs(parsedArgs.rest);
-      await worker.start();
-    }
+    await ExpressionCompilerWorker.createAndStart(parsedArgs.rest,
+        sendPort: sendPort);
   } else {
     var result = await compile(parsedArgs);
     exitCode = result.exitCode;
diff --git a/pkg/dev_compiler/lib/src/kernel/expression_compiler_worker.dart b/pkg/dev_compiler/lib/src/kernel/expression_compiler_worker.dart
index ab5c83e..f379041 100644
--- a/pkg/dev_compiler/lib/src/kernel/expression_compiler_worker.dart
+++ b/pkg/dev_compiler/lib/src/kernel/expression_compiler_worker.dart
@@ -7,6 +7,7 @@
 import 'dart:async';
 import 'dart:convert';
 import 'dart:io';
+import 'dart:isolate';
 
 import 'package:args/args.dart';
 import 'package:build_integration/file_system/multi_root.dart';
@@ -54,7 +55,7 @@
 ///
 ///    - debugger creates an isolate using dartdevc's main method with
 ///      '--experimental-expression-compiler' flag and passes a send port
-///      to dartdevc for sending responces from the service to the debugger.
+///      to dartdevc for sending responses from the service to the debugger.
 ///
 ///    - dartdevc creates a new send port to receive requests on, and sends
 ///      it back to the debugger, for sending requests to the service.
@@ -96,6 +97,48 @@
     this.sendResponse,
   );
 
+  /// Create expression compiler worker from [args] and start it.
+  ///
+  /// If [sendPort] is provided, creates a `receivePort` and sends it to
+  /// the consumer to establish communication. Otherwise, uses stdin/stdout
+  /// for communication with the consumer.
+  ///
+  /// Details:
+  ///
+  /// Consumer uses (`consumerSendPort`, `consumerReceivePort`) pair to
+  /// send requests and receive responses:
+  ///
+  /// `consumerReceivePort.sendport` = [sendPort]
+  /// `consumerSendPort = receivePort.sendport`
+  ///
+  /// Worker uses the opposite ports connected to the consumer ports -
+  /// (`receivePort`, [sendPort]) to receive requests and send responses.
+  ///
+  /// The worker stops on start failure or after the consumer closes its
+  /// receive port corresponding to [sendPort].
+  static Future<void> createAndStart(List<String> args,
+      {SendPort sendPort}) async {
+    if (sendPort != null) {
+      var receivePort = ReceivePort();
+      sendPort.send(receivePort.sendPort);
+      try {
+        var worker = await createFromArgs(args,
+            requestStream: receivePort.cast<Map<String, dynamic>>(),
+            sendResponse: sendPort.send);
+        await worker.start();
+      } catch (e, s) {
+        sendPort
+            .send({'exception': '$e', 'stackTrace': '$s', 'succeeded': false});
+        rethrow;
+      } finally {
+        receivePort.close();
+      }
+    } else {
+      var worker = await createFromArgs(args);
+      await worker.start();
+    }
+  }
+
   static Future<ExpressionCompilerWorker> createFromArgs(
     List<String> args, {
     Stream<Map<String, dynamic>> requestStream,
@@ -193,6 +236,9 @@
       return processedOptions.loadSdkSummary(null);
     });
 
+    if (sdkComponent == null) {
+      throw Exception('Could not load SDK component: $sdkSummary');
+    }
     return ExpressionCompilerWorker._(processedOptions, compilerOptions,
         moduleFormat, sdkComponent, requestStream, sendResponse)
       .._updateCache(sdkComponent, dartSdkModule, true);
diff --git a/pkg/dev_compiler/lib/src/kernel/nullable_inference.dart b/pkg/dev_compiler/lib/src/kernel/nullable_inference.dart
index b930366..07fa7d4 100644
--- a/pkg/dev_compiler/lib/src/kernel/nullable_inference.dart
+++ b/pkg/dev_compiler/lib/src/kernel/nullable_inference.dart
@@ -145,6 +145,11 @@
           node.interfaceTarget, node.name.text, node, node.receiver);
 
   @override
+  bool visitInstanceGetterInvocation(InstanceGetterInvocation node) =>
+      _invocationIsNullable(
+          node.interfaceTarget, node.name.text, node, node.receiver);
+
+  @override
   bool visitDynamicInvocation(DynamicInvocation node) =>
       _invocationIsNullable(null, node.name.text, node, node.receiver);
 
diff --git a/pkg/dev_compiler/lib/src/kernel/target.dart b/pkg/dev_compiler/lib/src/kernel/target.dart
index ffc64a4..1f8d5f6 100644
--- a/pkg/dev_compiler/lib/src/kernel/target.dart
+++ b/pkg/dev_compiler/lib/src/kernel/target.dart
@@ -440,6 +440,12 @@
   }
 
   @override
+  void visitInstanceGetterInvocation(InstanceGetterInvocation node) {
+    _checkTarget(node.receiver, node.interfaceTarget);
+    super.visitInstanceGetterInvocation(node);
+  }
+
+  @override
   void visitInstanceTearOff(InstanceTearOff node) {
     _checkTearoff(node.interfaceTarget);
     super.visitInstanceTearOff(node);
diff --git a/pkg/dev_compiler/pubspec.yaml b/pkg/dev_compiler/pubspec.yaml
index 3236e1e..746c800 100644
--- a/pkg/dev_compiler/pubspec.yaml
+++ b/pkg/dev_compiler/pubspec.yaml
@@ -28,7 +28,7 @@
     path: ../vm
 
 dev_dependencies:
-  browser_launcher: ^0.1.5
+  browser_launcher: ^0.1.9
   expect:
     path: ../expect
   js:
diff --git a/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_test.dart b/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_test.dart
index bacd973..dabd569 100644
--- a/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_test.dart
+++ b/pkg/dev_compiler/test/expression_compiler/expression_compiler_e2e_test.dart
@@ -55,9 +55,10 @@
 
 class SetupCompilerOptions {
   static final sdkRoot = fe.computePlatformBinariesLocation();
-  static final sdkUnsoundSummaryPath = p.join(sdkRoot.path, 'ddc_sdk.dill');
+  static final sdkUnsoundSummaryPath =
+      p.join(sdkRoot.toFilePath(), 'ddc_sdk.dill');
   static final sdkSoundSummaryPath =
-      p.join(sdkRoot.path, 'ddc_outline_sound.dill');
+      p.join(sdkRoot.toFilePath(), 'ddc_outline_sound.dill');
   static final librariesSpecificationUri =
       p.join(p.dirname(p.dirname(getSdkPath())), 'libraries.json');
   static final String dartUnsoundComment = '// @dart = 2.9';
@@ -75,10 +76,10 @@
       ..verbose = false // set to true for debugging
       ..sdkRoot = sdkRoot
       ..target = DevCompilerTarget(TargetFlags())
-      ..librariesSpecificationUri = Uri.base.resolve('sdk/lib/libraries.json')
+      ..librariesSpecificationUri = p.toUri('sdk/lib/libraries.json')
       ..omitPlatform = true
-      ..sdkSummary = sdkRoot.resolve(
-          soundNullSafety ? sdkSoundSummaryPath : sdkUnsoundSummaryPath)
+      ..sdkSummary =
+          p.toUri(soundNullSafety ? sdkSoundSummaryPath : sdkUnsoundSummaryPath)
       ..environmentDefines = const {}
       ..nnbdMode = soundNullSafety ? fe.NnbdMode.Strong : fe.NnbdMode.Weak;
     return options;
@@ -119,7 +120,6 @@
     // TODO: extend this for multi-module compilations by storing separate
     // compilers/components/names per module.
     setup.options.packagesFileUri = packages;
-
     var compiler = DevelopmentIncrementalCompiler(setup.options, input);
     component = await compiler.computeDelta();
     component.computeCanonicalNames();
@@ -243,7 +243,7 @@
 
     // Start Chrome on an empty page with a single empty tab.
     chrome = await browser.Chrome.startWithDebugPort(['about:blank'],
-        userDataDir: chromeDir.path, headless: true);
+        userDataDir: chromeDir.uri.toFilePath(), headless: true);
 
     // Connect to the first 'normal' tab.
     var tab = await chrome.chromeConnection
@@ -261,17 +261,16 @@
     this.source = source;
     testDir = await chromeDir.createTemp('ddc_eval_test');
     var buildDir = p.dirname(p.dirname(p.dirname(Platform.resolvedExecutable)));
-    var scriptPath =
-        Platform.script.normalizePath().toFilePath(windows: Platform.isWindows);
+    var scriptPath = Platform.script.normalizePath().toFilePath();
     var ddcPath = p.dirname(p.dirname(p.dirname(scriptPath)));
     output = testDir.uri.resolve('test.js');
     input = testDir.uri.resolve('test.dart');
-    File.fromUri(input)
+    File(input.toFilePath())
       ..createSync()
       ..writeAsStringSync(source);
 
     packagesFile = testDir.uri.resolve('package_config.json');
-    File.fromUri(packagesFile)
+    File(packagesFile.toFilePath())
       ..createSync()
       ..writeAsStringSync('''
       {
@@ -291,27 +290,28 @@
         .init(input: input, output: output, packages: packagesFile);
 
     htmlBootstrapper = testDir.uri.resolve('bootstrapper.html');
-    var bootstrapFile = File.fromUri(htmlBootstrapper)..createSync();
+    var bootstrapFile = File(htmlBootstrapper.toFilePath())..createSync();
     var moduleName = compiler.metadata.name;
     var mainLibraryName = compiler.metadataForLibraryUri(input).name;
 
     switch (setup.moduleFormat) {
       case ModuleFormat.ddc:
         moduleFormatString = 'ddc';
-        var dartSdkPath = p.join(
+        var dartSdkPath = escaped(p.join(
             buildDir,
             'gen',
             'utils',
             'dartdevc',
             setup.soundNullSafety ? 'sound' : 'kernel',
             'legacy',
-            'dart_sdk.js');
+            'dart_sdk.js'));
         var dartLibraryPath =
-            p.join(ddcPath, 'lib', 'js', 'legacy', 'dart_library.js');
+            escaped(p.join(ddcPath, 'lib', 'js', 'legacy', 'dart_library.js'));
+        var outputPath = escaped(output.toFilePath());
         bootstrapFile.writeAsStringSync('''
 <script src='$dartLibraryPath'></script>
 <script src='$dartSdkPath'></script>
-<script src='${p.absolute(output.path)}'></script>
+<script src='$outputPath'></script>
 <script>
   'use strict';
   var sound = ${setup.soundNullSafety};
@@ -330,17 +330,18 @@
         break;
       case ModuleFormat.amd:
         moduleFormatString = 'amd';
-        var dartSdkPath = p.join(buildDir, 'gen', 'utils', 'dartdevc',
-            setup.soundNullSafety ? 'sound' : 'kernel', 'amd', 'dart_sdk');
-        var requirePath = p.join(buildDir, 'dart-sdk', 'lib', 'dev_compiler',
-            'kernel', 'amd', 'require.js');
+        var dartSdkPath = escaped(p.join(buildDir, 'gen', 'utils', 'dartdevc',
+            setup.soundNullSafety ? 'sound' : 'kernel', 'amd', 'dart_sdk'));
+        var requirePath = escaped(p.join(buildDir, 'dart-sdk', 'lib',
+            'dev_compiler', 'kernel', 'amd', 'require.js'));
+        var outputPath = escaped(p.withoutExtension(output.toFilePath()));
         bootstrapFile.writeAsStringSync('''
 <script src='$requirePath'></script>
 <script>
   require.config({
     paths: {
         'dart_sdk': '$dartSdkPath',
-        '$moduleName': '${p.withoutExtension(p.absolute(output.path))}'
+        '$moduleName': '${outputPath}'
     },
     waitSeconds: 15
   });
@@ -361,6 +362,7 @@
   });
 </script>
 ''');
+
         break;
       default:
         throw Exception(
@@ -377,8 +379,10 @@
     });
   }
 
-  void finish() {
-    chrome?.close();
+  void finish() async {
+    await chrome?.close();
+    // Chrome takes a while to free its claim on chromeDir, so wait a bit.
+    await Future.delayed(const Duration(milliseconds: 500));
     chromeDir?.deleteSync(recursive: true);
   }
 
@@ -403,7 +407,7 @@
     // Navigate from the empty page and immediately pause on the preemptive
     // breakpoint.
     await connection.page.navigate('$htmlBootstrapper');
-    await Future.delayed(const Duration(seconds: 1));
+    await Future.delayed(const Duration(milliseconds: 500));
 
     // TODO: We use lastWhere since the debugger accumulates scriptIds across
     // tests. We can use firstWhere if we clear debugger.scripts - perhaps by
@@ -441,7 +445,7 @@
       expect(
           result,
           const TypeMatcher<TestCompilationResult>()
-              .having((r) => result.result, 'result', _matches(expectedError)));
+              .having((_) => result.result, 'result', _matches(expectedError)));
       setup.diagnosticMessages.clear();
       setup.errors.clear();
       return;
@@ -545,4 +549,359 @@
   return scopes;
 }
 
-void main() async => {};
+String escaped(String path) => path.replaceAll('\\', '\\\\');
+
+void main() async {
+  group('Unsound null safety:', () {
+    var setup = SetupCompilerOptions(soundNullSafety: false);
+    TestDriver driver;
+
+    setUpAll(() async {
+      driver = await TestDriver.init(setup);
+    });
+
+    tearDownAll(() {
+      driver.finish();
+    });
+
+    group('Expression compiler extension symbols tests', () {
+      var source = '''
+        ${setup.dartLangComment}
+
+        main() {
+          List<int> list = [];
+          list.add(0);
+          // Breakpoint: bp
+        }
+        ''';
+
+      setUpAll(() async {
+        await driver.initSource(setup, source);
+      });
+
+      tearDownAll(() async {
+        await driver.cleanupTest();
+      });
+
+      test('extension symbol used only in expression compilation', () async {
+        await driver.check(
+            breakpointId: 'bp', expression: 'list.first', expectedResult: '0');
+      });
+
+      test('extension symbol used in original compilation', () async {
+        await driver.check(
+            breakpointId: 'bp',
+            expression: '() { list.add(1); return list.last; }()',
+            expectedResult: '1');
+      });
+    });
+
+    group('Expression compiler scope collection tests', () {
+      var source = '''
+        ${setup.dartLangComment}
+
+        class C {
+          C(this.field);
+
+          void methodFieldAccess(int x) {
+            var inScope = 1;
+            {
+              var innerInScope = global + staticField + field;
+              // Breakpoint: bp
+              var innerNotInScope = 2;
+            }
+            var notInScope = 3;
+          }
+
+          static int staticField = 0;
+          int field;
+        }
+
+        int global = 42;
+        main() => C(4).methodFieldAccess(5);
+        ''';
+
+      setUpAll(() async {
+        await driver.initSource(setup, source);
+      });
+
+      tearDownAll(() async {
+        await driver.cleanupTest();
+      });
+
+      test('local in scope', () async {
+        await driver.check(
+            breakpointId: 'bp', expression: 'inScope', expectedResult: '1');
+      });
+
+      test('local in inner scope', () async {
+        await driver.check(
+            breakpointId: 'bp',
+            expression: 'innerInScope',
+            expectedResult: '46');
+      });
+
+      test('global in scope', () async {
+        await driver.check(
+            breakpointId: 'bp', expression: 'global', expectedResult: '42');
+      });
+
+      test('static field in scope', () async {
+        await driver.check(
+            breakpointId: 'bp', expression: 'staticField', expectedResult: '0');
+      });
+
+      test('field in scope', () async {
+        await driver.check(
+            breakpointId: 'bp', expression: 'field', expectedResult: '4');
+      });
+
+      test('parameter in scope', () async {
+        await driver.check(
+            breakpointId: 'bp', expression: 'x', expectedResult: '5');
+      });
+
+      test('local not in scope', () async {
+        await driver.check(
+            breakpointId: 'bp',
+            expression: 'notInScope',
+            expectedError:
+                "Error: The getter 'notInScope' isn't defined for the"
+                " class 'C'.");
+      });
+
+      test('local not in inner scope', () async {
+        await driver.check(
+            breakpointId: 'bp',
+            expression: 'innerNotInScope',
+            expectedError:
+                "Error: The getter 'innerNotInScope' isn't defined for the"
+                " class 'C'.");
+      });
+    });
+
+    group('Expression compiler tests in extension method:', () {
+      var source = '''
+        ${setup.dartLangComment}
+        extension NumberParsing on String {
+          int parseInt() {
+            var ret = int.parse(this);
+            // Breakpoint: bp
+            return ret;
+          }
+        }
+        main() => "1234".parseInt();
+      ''';
+
+      setUpAll(() async {
+        await driver.initSource(setup, source);
+      });
+
+      tearDownAll(() {
+        driver.cleanupTest();
+      });
+
+      test('compilation error', () async {
+        await driver.check(
+            breakpointId: 'bp',
+            expression: 'typo',
+            expectedError: "Error: Getter not found: 'typo'");
+      });
+
+      test('local (trimmed scope)', () async {
+        await driver.check(
+            breakpointId: 'bp', expression: 'ret', expectedResult: '1234');
+      });
+
+      test('this (full scope)', () async {
+        // Note: this currently fails due to
+        // - incremental compiler not mapping 'this' from user input to '#this'
+        // - incremental compiler not allowing #this as a parameter name
+        await driver.check(
+            breakpointId: 'bp',
+            expression: 'this',
+            expectedError: "Error: Expected identifier, but got 'this'");
+      });
+    });
+
+    group('Expression compiler tests in static function:', () {
+      var source = '''
+        ${setup.dartLangComment}
+        int foo(int x, {int y}) {
+          int z = 3;
+          // Breakpoint: bp
+          return x + y + z;
+        }
+
+        main() => foo(1, y: 2);
+        ''';
+
+      setUpAll(() async {
+        await driver.initSource(setup, source);
+      });
+
+      tearDownAll(() {
+        driver.cleanupTest();
+      });
+
+      test('compilation error', () async {
+        await driver.check(
+            breakpointId: 'bp',
+            expression: 'typo',
+            expectedError: "Getter not found: \'typo\'");
+      });
+
+      test('local', () async {
+        await driver.check(
+            breakpointId: 'bp', expression: 'x', expectedResult: '1');
+      });
+
+      test('formal', () async {
+        await driver.check(
+            breakpointId: 'bp', expression: 'y', expectedResult: '2');
+      });
+
+      test('named formal', () async {
+        await driver.check(
+            breakpointId: 'bp', expression: 'z', expectedResult: '3');
+      });
+
+      test('function', () async {
+        await driver
+            .check(breakpointId: 'bp', expression: 'main', expectedResult: '''
+              function main() {
+                return test.foo(1, {y: 2});
+              }''');
+      });
+    });
+  });
+
+  group('Sound null safety:', () {
+    var setup = SetupCompilerOptions(soundNullSafety: false);
+    TestDriver driver;
+
+    setUpAll(() async {
+      driver = await TestDriver.init(setup);
+    });
+
+    tearDownAll(() {
+      driver.finish();
+    });
+
+    group('Expression compiler extension symbols tests', () {
+      var source = '''
+        ${setup.dartLangComment}
+
+        main() {
+          List<int> list = [];
+          list.add(0);
+          // Breakpoint: bp
+        }
+        ''';
+
+      setUpAll(() async {
+        await driver.initSource(setup, source);
+      });
+
+      tearDownAll(() async {
+        await driver.cleanupTest();
+      });
+
+      test('extension symbol used only in expression compilation', () async {
+        await driver.check(
+            breakpointId: 'bp', expression: 'list.first', expectedResult: '0');
+      });
+
+      test('extension symbol used in original compilation', () async {
+        await driver.check(
+            breakpointId: 'bp',
+            expression: '() { list.add(1); return list.last; }()',
+            expectedResult: '1');
+      });
+    });
+
+    group('Expression compiler scope collection tests', () {
+      var source = '''
+        ${setup.dartLangComment}
+
+        class C {
+          C(this.field);
+
+          void methodFieldAccess(int x) {
+            var inScope = 1;
+            {
+              var innerInScope = global + staticField + field;
+              // Breakpoint: bp
+              var innerNotInScope = 2;
+            }
+            var notInScope = 3;
+          }
+
+          static int staticField = 0;
+          int field;
+        }
+
+        int global = 42;
+        main() => C(4).methodFieldAccess(5);
+        ''';
+
+      setUpAll(() async {
+        await driver.initSource(setup, source);
+      });
+
+      tearDownAll(() async {
+        await driver.cleanupTest();
+      });
+
+      test('local in scope', () async {
+        await driver.check(
+            breakpointId: 'bp', expression: 'inScope', expectedResult: '1');
+      });
+
+      test('local in inner scope', () async {
+        await driver.check(
+            breakpointId: 'bp',
+            expression: 'innerInScope',
+            expectedResult: '46');
+      });
+
+      test('global in scope', () async {
+        await driver.check(
+            breakpointId: 'bp', expression: 'global', expectedResult: '42');
+      });
+
+      test('static field in scope', () async {
+        await driver.check(
+            breakpointId: 'bp', expression: 'staticField', expectedResult: '0');
+      });
+
+      test('field in scope', () async {
+        await driver.check(
+            breakpointId: 'bp', expression: 'field', expectedResult: '4');
+      });
+
+      test('parameter in scope', () async {
+        await driver.check(
+            breakpointId: 'bp', expression: 'x', expectedResult: '5');
+      });
+
+      test('local not in scope', () async {
+        await driver.check(
+            breakpointId: 'bp',
+            expression: 'notInScope',
+            expectedError:
+                "Error: The getter 'notInScope' isn't defined for the"
+                " class 'C'.");
+      });
+
+      test('local not in inner scope', () async {
+        await driver.check(
+            breakpointId: 'bp',
+            expression: 'innerNotInScope',
+            expectedError:
+                "Error: The getter 'innerNotInScope' isn't defined for the"
+                " class 'C'.");
+      });
+    });
+  });
+}
diff --git a/pkg/dev_compiler/test/expression_compiler/expression_compiler_worker_test.dart b/pkg/dev_compiler/test/expression_compiler/expression_compiler_worker_test.dart
index b784e96..4903914 100644
--- a/pkg/dev_compiler/test/expression_compiler/expression_compiler_worker_test.dart
+++ b/pkg/dev_compiler/test/expression_compiler/expression_compiler_worker_test.dart
@@ -7,6 +7,7 @@
 import 'dart:async';
 import 'dart:convert';
 import 'dart:io' show Directory, File, Platform, Process, stderr, stdout;
+import 'dart:isolate';
 
 import 'package:build_integration/file_system/multi_root.dart';
 import 'package:front_end/src/api_prototype/standard_file_system.dart';
@@ -216,6 +217,55 @@
     group('$moduleFormat module format -', () {
       for (var soundNullSafety in [true, false]) {
         group('${soundNullSafety ? "sound" : "unsound"} null safety -', () {
+          group('expression compiler worker on startup', () {
+            Directory tempDir;
+            ReceivePort receivePort;
+
+            setUp(() async {
+              tempDir = Directory.systemTemp.createTempSync('foo bar');
+              receivePort = ReceivePort();
+            });
+
+            tearDown(() async {
+              tempDir.deleteSync(recursive: true);
+              receivePort.close();
+            });
+
+            test('reports failure to consumer', () async {
+              expect(
+                  receivePort,
+                  emitsInOrder([
+                    equals(isA<SendPort>()),
+                    equals({
+                      'succeeded': false,
+                      'stackTrace': isNotNull,
+                      'exception': contains('Could not load SDK component'),
+                    }),
+                  ]));
+
+              try {
+                var badPath = 'file:///path/does/not/exist';
+                await ExpressionCompilerWorker.createAndStart(
+                  [
+                    '--libraries-file',
+                    badPath,
+                    '--dart-sdk-summary',
+                    badPath,
+                    '--module-format',
+                    moduleFormat,
+                    soundNullSafety
+                        ? '--sound-null-safety'
+                        : '--no-sound-null-safety',
+                    if (verbose) '--verbose',
+                  ],
+                  sendPort: receivePort.sendPort,
+                );
+              } catch (e) {
+                throwsA(contains('Could not load SDK component'));
+              }
+            });
+          });
+
           for (var summarySupport in [true, false]) {
             group('${summarySupport ? "" : "no "}debugger summary support -',
                 () {
diff --git a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
index ff30dfe..f787d78 100644
--- a/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/constant_evaluator.dart
@@ -3363,6 +3363,29 @@
       new BreakStatus(node.target);
 
   @override
+  ExecutionStatus visitDoStatement(DoStatement node) {
+    Constant condition;
+    do {
+      ExecutionStatus status = node.body.accept(this);
+      if (status is! ProceedStatus) return status;
+      condition = evaluate(node.condition);
+    } while (condition is BoolConstant && condition.value);
+
+    if (condition is AbortConstant) {
+      return new AbortStatus(condition);
+    } else if (condition is! BoolConstant) {
+      return new AbortStatus(exprEvaluator.createErrorConstant(
+          node.condition,
+          templateConstEvalInvalidType.withArguments(
+              condition,
+              exprEvaluator.typeEnvironment.coreTypes.boolLegacyRawType,
+              condition.getType(exprEvaluator._staticTypeContext),
+              exprEvaluator.isNonNullableByDefault)));
+    }
+    return const ProceedStatus();
+  }
+
+  @override
   ExecutionStatus visitIfStatement(IfStatement node) {
     Constant condition = evaluate(node.condition);
     if (condition is AbortConstant) return new AbortStatus(condition);
diff --git a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
index 6a3e269..51d4375 100644
--- a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
@@ -2981,13 +2981,16 @@
   int computeVariances() {
     int count = 0;
     for (Builder declaration in libraryDeclaration.members.values) {
-      if (declaration is TypeAliasBuilder &&
-          declaration.typeVariablesCount > 0) {
-        for (TypeVariableBuilder typeParameter in declaration.typeVariables) {
-          typeParameter.variance = computeTypeVariableBuilderVariance(
-              typeParameter, declaration.type, this);
-          ++count;
+      while (declaration != null) {
+        if (declaration is TypeAliasBuilder &&
+            declaration.typeVariablesCount > 0) {
+          for (TypeVariableBuilder typeParameter in declaration.typeVariables) {
+            typeParameter.variance = computeTypeVariableBuilderVariance(
+                typeParameter, declaration.type, this);
+            ++count;
+          }
         }
+        declaration = declaration.next;
       }
     }
     return count;
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
index d754099..c8fbea5e 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
@@ -3330,24 +3330,38 @@
               ..fileOffset = nullAwareAction.fileOffset);
       } else if (nullAwareAction is InstanceInvocation &&
           nullAwareAction.receiver == originalPropertyGet) {
+        // TODO(johnniwinther): Remove this when [MethodInvocation] is no longer
+        // used and [originalPropertyGet] can be an [InstanceGet].
+        InstanceGet instanceGet = originalPropertyGet;
         invocationResult = new ExpressionInferenceResult(
             invocationResult.inferredType,
-            new MethodInvocation(originalReceiver, originalName,
-                nullAwareAction.arguments, originalTarget)
+            new InstanceGetterInvocation(instanceGet.kind, originalReceiver,
+                originalName, nullAwareAction.arguments,
+                interfaceTarget: originalTarget,
+                functionType: nullAwareAction.functionType)
               ..fileOffset = nullAwareAction.fileOffset);
       } else if (nullAwareAction is DynamicInvocation &&
           nullAwareAction.receiver == originalPropertyGet) {
+        // TODO(johnniwinther): Remove this when [MethodInvocation] is no longer
+        // used and [originalPropertyGet] can be an [InstanceGet].
+        InstanceGet instanceGet = originalPropertyGet;
         invocationResult = new ExpressionInferenceResult(
             invocationResult.inferredType,
-            new MethodInvocation(originalReceiver, originalName,
-                nullAwareAction.arguments, originalTarget)
+            new InstanceGetterInvocation(instanceGet.kind, originalReceiver,
+                originalName, nullAwareAction.arguments,
+                interfaceTarget: originalTarget, functionType: null)
               ..fileOffset = nullAwareAction.fileOffset);
       } else if (nullAwareAction is FunctionInvocation &&
           nullAwareAction.receiver == originalPropertyGet) {
+        // TODO(johnniwinther): Remove this when [MethodInvocation] is no longer
+        // used and [originalPropertyGet] can be an [InstanceGet].
+        InstanceGet instanceGet = originalPropertyGet;
         invocationResult = new ExpressionInferenceResult(
             invocationResult.inferredType,
-            new MethodInvocation(originalReceiver, originalName,
-                nullAwareAction.arguments, originalTarget)
+            new InstanceGetterInvocation(instanceGet.kind, originalReceiver,
+                originalName, nullAwareAction.arguments,
+                interfaceTarget: originalTarget,
+                functionType: nullAwareAction.functionType)
               ..fileOffset = nullAwareAction.fileOffset);
       }
     }
diff --git a/pkg/front_end/test/fasta/analyze_git_test.dart b/pkg/front_end/test/fasta/analyze_git_test.dart
index 044385e..684f469 100644
--- a/pkg/front_end/test/fasta/analyze_git_test.dart
+++ b/pkg/front_end/test/fasta/analyze_git_test.dart
@@ -4,13 +4,18 @@
 
 // @dart = 2.9
 
+import 'dart:io' show exitCode;
+
 import "package:testing/src/run_tests.dart" as testing show main;
 
-main() {
+main() async {
   // This method is async, but keeps a port open to prevent the VM from exiting
   // prematurely.
   // Note: if you change this file, also change
   // pkg/compiler/test/analyses/analyze_test.dart
-  return testing.main(
+  await testing.main(
       <String>["--config=pkg/front_end/testing.json", "--verbose", "analyze"]);
+  if (exitCode != 0) {
+    throw "Exit-code was $exitCode!";
+  }
 }
diff --git a/pkg/front_end/test/fasta/analyze_src_with_lints_git_test.dart b/pkg/front_end/test/fasta/analyze_src_with_lints_git_test.dart
index 652d6b7..aba5e28 100644
--- a/pkg/front_end/test/fasta/analyze_src_with_lints_git_test.dart
+++ b/pkg/front_end/test/fasta/analyze_src_with_lints_git_test.dart
@@ -4,12 +4,17 @@
 
 // @dart = 2.9
 
+import 'dart:io' show exitCode;
+
 import "package:testing/src/run_tests.dart" as testing show main;
 
 main() async {
-  return await testing.main(<String>[
+  await testing.main(<String>[
     "--config=pkg/front_end/testing_with_lints.json",
     "--verbose",
     "analyze"
   ]);
+  if (exitCode != 0) {
+    throw "Exit-code was $exitCode!";
+  }
 }
diff --git a/pkg/front_end/test/spell_checking_list_code.txt b/pkg/front_end/test/spell_checking_list_code.txt
index 0863ec7..dfcff07 100644
--- a/pkg/front_end/test/spell_checking_list_code.txt
+++ b/pkg/front_end/test/spell_checking_list_code.txt
@@ -353,6 +353,7 @@
 dst
 dummy
 dupdate
+dyn
 e
 easy
 ecma
diff --git a/pkg/front_end/testcases/const_functions/const_functions_do_statements.dart b/pkg/front_end/testcases/const_functions/const_functions_do_statements.dart
new file mode 100644
index 0000000..f7f45b1
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/const_functions_do_statements.dart
@@ -0,0 +1,46 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Tests do-while statements for const functions.
+
+import "package:expect/expect.dart";
+
+const var1 = fn();
+int fn() {
+  int x = 0;
+  do {
+    x++;
+  } while (x < 2);
+  return x;
+}
+
+const var2 = fn2(2);
+const var3 = fn2(10);
+int fn2(int a) {
+  int x = 0, b = 0;
+  do {
+    if (x > 5) break;
+    x += a;
+    b++;
+  } while (b < 2);
+  return x;
+}
+
+const var4 = fn3();
+int fn3() {
+  int x = 0, b = 0;
+  do {
+    x += 1;
+    if (x % 2 == 1) continue;
+    b += x;
+  } while (x < 5);
+  return b;
+}
+
+void main() {
+  Expect.equals(var1, 2);
+  Expect.equals(var2, 4);
+  Expect.equals(var3, 10);
+  Expect.equals(var4, 6);
+}
diff --git a/pkg/front_end/testcases/const_functions/const_functions_do_statements.dart.strong.expect b/pkg/front_end/testcases/const_functions/const_functions_do_statements.dart.strong.expect
new file mode 100644
index 0000000..1737f7b
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/const_functions_do_statements.dart.strong.expect
@@ -0,0 +1,59 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "package:expect/expect.dart" as exp;
+
+import "package:expect/expect.dart";
+
+static const field core::int var1 = #C1;
+static const field core::int var2 = #C2;
+static const field core::int var3 = #C3;
+static const field core::int var4 = #C4;
+static method fn() → core::int {
+  core::int x = 0;
+  do {
+    x = x.{core::num::+}(1);
+  }
+  while (x.{core::num::<}(2))
+  return x;
+}
+static method fn2(core::int a) → core::int {
+  core::int x = 0;
+  core::int b = 0;
+  #L1:
+  do {
+    if(x.{core::num::>}(5))
+      break #L1;
+    x = x.{core::num::+}(a);
+    b = b.{core::num::+}(1);
+  }
+  while (b.{core::num::<}(2))
+  return x;
+}
+static method fn3() → core::int {
+  core::int x = 0;
+  core::int b = 0;
+  do
+    #L2:
+    {
+      x = x.{core::num::+}(1);
+      if(x.{core::num::%}(2).{core::num::==}(1))
+        break #L2;
+      b = b.{core::num::+}(x);
+    }
+  while (x.{core::num::<}(5))
+  return b;
+}
+static method main() → void {
+  exp::Expect::equals(#C1, 2);
+  exp::Expect::equals(#C2, 4);
+  exp::Expect::equals(#C3, 10);
+  exp::Expect::equals(#C4, 6);
+}
+
+constants  {
+  #C1 = 2
+  #C2 = 4
+  #C3 = 10
+  #C4 = 6
+}
diff --git a/pkg/front_end/testcases/const_functions/const_functions_do_statements.dart.strong.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_do_statements.dart.strong.transformed.expect
new file mode 100644
index 0000000..1737f7b
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/const_functions_do_statements.dart.strong.transformed.expect
@@ -0,0 +1,59 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "package:expect/expect.dart" as exp;
+
+import "package:expect/expect.dart";
+
+static const field core::int var1 = #C1;
+static const field core::int var2 = #C2;
+static const field core::int var3 = #C3;
+static const field core::int var4 = #C4;
+static method fn() → core::int {
+  core::int x = 0;
+  do {
+    x = x.{core::num::+}(1);
+  }
+  while (x.{core::num::<}(2))
+  return x;
+}
+static method fn2(core::int a) → core::int {
+  core::int x = 0;
+  core::int b = 0;
+  #L1:
+  do {
+    if(x.{core::num::>}(5))
+      break #L1;
+    x = x.{core::num::+}(a);
+    b = b.{core::num::+}(1);
+  }
+  while (b.{core::num::<}(2))
+  return x;
+}
+static method fn3() → core::int {
+  core::int x = 0;
+  core::int b = 0;
+  do
+    #L2:
+    {
+      x = x.{core::num::+}(1);
+      if(x.{core::num::%}(2).{core::num::==}(1))
+        break #L2;
+      b = b.{core::num::+}(x);
+    }
+  while (x.{core::num::<}(5))
+  return b;
+}
+static method main() → void {
+  exp::Expect::equals(#C1, 2);
+  exp::Expect::equals(#C2, 4);
+  exp::Expect::equals(#C3, 10);
+  exp::Expect::equals(#C4, 6);
+}
+
+constants  {
+  #C1 = 2
+  #C2 = 4
+  #C3 = 10
+  #C4 = 6
+}
diff --git a/pkg/front_end/testcases/const_functions/const_functions_do_statements.dart.textual_outline.expect b/pkg/front_end/testcases/const_functions/const_functions_do_statements.dart.textual_outline.expect
new file mode 100644
index 0000000..4f0d977
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/const_functions_do_statements.dart.textual_outline.expect
@@ -0,0 +1,10 @@
+import "package:expect/expect.dart";
+
+const var1 = fn();
+int fn() {}
+const var2 = fn2(2);
+const var3 = fn2(10);
+int fn2(int a) {}
+const var4 = fn3();
+int fn3() {}
+void main() {}
diff --git a/pkg/front_end/testcases/const_functions/const_functions_do_statements.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/const_functions/const_functions_do_statements.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..155303b
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/const_functions_do_statements.dart.textual_outline_modelled.expect
@@ -0,0 +1,10 @@
+import "package:expect/expect.dart";
+
+const var1 = fn();
+const var2 = fn2(2);
+const var3 = fn2(10);
+const var4 = fn3();
+int fn() {}
+int fn2(int a) {}
+int fn3() {}
+void main() {}
diff --git a/pkg/front_end/testcases/const_functions/const_functions_do_statements.dart.weak.expect b/pkg/front_end/testcases/const_functions/const_functions_do_statements.dart.weak.expect
new file mode 100644
index 0000000..1737f7b
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/const_functions_do_statements.dart.weak.expect
@@ -0,0 +1,59 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "package:expect/expect.dart" as exp;
+
+import "package:expect/expect.dart";
+
+static const field core::int var1 = #C1;
+static const field core::int var2 = #C2;
+static const field core::int var3 = #C3;
+static const field core::int var4 = #C4;
+static method fn() → core::int {
+  core::int x = 0;
+  do {
+    x = x.{core::num::+}(1);
+  }
+  while (x.{core::num::<}(2))
+  return x;
+}
+static method fn2(core::int a) → core::int {
+  core::int x = 0;
+  core::int b = 0;
+  #L1:
+  do {
+    if(x.{core::num::>}(5))
+      break #L1;
+    x = x.{core::num::+}(a);
+    b = b.{core::num::+}(1);
+  }
+  while (b.{core::num::<}(2))
+  return x;
+}
+static method fn3() → core::int {
+  core::int x = 0;
+  core::int b = 0;
+  do
+    #L2:
+    {
+      x = x.{core::num::+}(1);
+      if(x.{core::num::%}(2).{core::num::==}(1))
+        break #L2;
+      b = b.{core::num::+}(x);
+    }
+  while (x.{core::num::<}(5))
+  return b;
+}
+static method main() → void {
+  exp::Expect::equals(#C1, 2);
+  exp::Expect::equals(#C2, 4);
+  exp::Expect::equals(#C3, 10);
+  exp::Expect::equals(#C4, 6);
+}
+
+constants  {
+  #C1 = 2
+  #C2 = 4
+  #C3 = 10
+  #C4 = 6
+}
diff --git a/pkg/front_end/testcases/const_functions/const_functions_do_statements.dart.weak.outline.expect b/pkg/front_end/testcases/const_functions/const_functions_do_statements.dart.weak.outline.expect
new file mode 100644
index 0000000..3c2ca31
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/const_functions_do_statements.dart.weak.outline.expect
@@ -0,0 +1,18 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "package:expect/expect.dart";
+
+static const field core::int var1 = self::fn();
+static const field core::int var2 = self::fn2(2);
+static const field core::int var3 = self::fn2(10);
+static const field core::int var4 = self::fn3();
+static method fn() → core::int
+  ;
+static method fn2(core::int a) → core::int
+  ;
+static method fn3() → core::int
+  ;
+static method main() → void
+  ;
diff --git a/pkg/front_end/testcases/const_functions/const_functions_do_statements.dart.weak.transformed.expect b/pkg/front_end/testcases/const_functions/const_functions_do_statements.dart.weak.transformed.expect
new file mode 100644
index 0000000..1737f7b
--- /dev/null
+++ b/pkg/front_end/testcases/const_functions/const_functions_do_statements.dart.weak.transformed.expect
@@ -0,0 +1,59 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "package:expect/expect.dart" as exp;
+
+import "package:expect/expect.dart";
+
+static const field core::int var1 = #C1;
+static const field core::int var2 = #C2;
+static const field core::int var3 = #C3;
+static const field core::int var4 = #C4;
+static method fn() → core::int {
+  core::int x = 0;
+  do {
+    x = x.{core::num::+}(1);
+  }
+  while (x.{core::num::<}(2))
+  return x;
+}
+static method fn2(core::int a) → core::int {
+  core::int x = 0;
+  core::int b = 0;
+  #L1:
+  do {
+    if(x.{core::num::>}(5))
+      break #L1;
+    x = x.{core::num::+}(a);
+    b = b.{core::num::+}(1);
+  }
+  while (b.{core::num::<}(2))
+  return x;
+}
+static method fn3() → core::int {
+  core::int x = 0;
+  core::int b = 0;
+  do
+    #L2:
+    {
+      x = x.{core::num::+}(1);
+      if(x.{core::num::%}(2).{core::num::==}(1))
+        break #L2;
+      b = b.{core::num::+}(x);
+    }
+  while (x.{core::num::<}(5))
+  return b;
+}
+static method main() → void {
+  exp::Expect::equals(#C1, 2);
+  exp::Expect::equals(#C2, 4);
+  exp::Expect::equals(#C3, 10);
+  exp::Expect::equals(#C4, 6);
+}
+
+constants  {
+  #C1 = 2
+  #C2 = 4
+  #C3 = 10
+  #C4 = 6
+}
diff --git a/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart b/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart
new file mode 100644
index 0000000..1ef505e
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart
@@ -0,0 +1,17 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+T id<T>(T t) => t;
+
+class Class {
+  S Function<S>(S) get idFunction => id;
+  dynamic get dynFunction => id;
+}
+
+main() {
+  Class c = new Class();
+  c.idFunction(0);
+  c.idFunction<int>(0);
+  c.dynFunction(0);
+}
diff --git a/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart.strong.expect b/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart.strong.expect
new file mode 100644
index 0000000..e29a84e
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart.strong.expect
@@ -0,0 +1,25 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  get idFunction() → <S extends core::Object? = dynamic>(S%) → S%
+    return #C1;
+  get dynFunction() → dynamic
+    return #C1;
+}
+static method id<T extends core::Object? = dynamic>(self::id::T% t) → self::id::T%
+  return t;
+static method main() → dynamic {
+  self::Class c = new self::Class::•();
+  let final self::Class #t1 = c in let final core::int #t2 = 0 in #t1.{self::Class::idFunction}<core::int>(#t2){(core::int) → core::int};
+  let final self::Class #t3 = c in let final core::int #t4 = 0 in #t3.{self::Class::idFunction}<core::int>(#t4){(core::int) → core::int};
+  let final self::Class #t5 = c in let final core::int #t6 = 0 in #t5.{self::Class::dynFunction}(#t6);
+}
+
+constants  {
+  #C1 = tearoff self::id
+}
diff --git a/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart.strong.transformed.expect b/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart.strong.transformed.expect
new file mode 100644
index 0000000..6a431a4
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart.strong.transformed.expect
@@ -0,0 +1,31 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  get idFunction() → <S extends core::Object? = dynamic>(S%) → S%
+    return #C1;
+  get dynFunction() → dynamic
+    return #C1;
+}
+static method id<T extends core::Object? = dynamic>(self::id::T% t) → self::id::T%
+  return t;
+static method main() → dynamic {
+  self::Class c = new self::Class::•();
+  let final self::Class #t1 = c in let final core::int #t2 = 0 in #t1.{self::Class::idFunction}<core::int>(#t2){(core::int) → core::int};
+  let final self::Class #t3 = c in let final core::int #t4 = 0 in #t3.{self::Class::idFunction}<core::int>(#t4){(core::int) → core::int};
+  let final self::Class #t5 = c in let final core::int #t6 = 0 in #t5.{self::Class::dynFunction}(#t6);
+}
+
+constants  {
+  #C1 = tearoff self::id
+}
+
+Extra constant evaluation status:
+Evaluated: VariableGet @ org-dartlang-testcase:///instance_getter_invocation.dart:14:16 -> DoubleConstant(0.0)
+Evaluated: VariableGet @ org-dartlang-testcase:///instance_getter_invocation.dart:15:21 -> DoubleConstant(0.0)
+Evaluated: VariableGet @ org-dartlang-testcase:///instance_getter_invocation.dart:16:17 -> DoubleConstant(0.0)
+Extra constant evaluation: evaluated: 20, effectively constant: 3
diff --git a/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart.textual_outline.expect b/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart.textual_outline.expect
new file mode 100644
index 0000000..9cd1271
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart.textual_outline.expect
@@ -0,0 +1,8 @@
+T id<T>(T t) => t;
+
+class Class {
+  S Function<S>(S) get idFunction => id;
+  dynamic get dynFunction => id;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..9cd1271
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart.textual_outline_modelled.expect
@@ -0,0 +1,8 @@
+T id<T>(T t) => t;
+
+class Class {
+  S Function<S>(S) get idFunction => id;
+  dynamic get dynFunction => id;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart.weak.expect b/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart.weak.expect
new file mode 100644
index 0000000..e29a84e
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart.weak.expect
@@ -0,0 +1,25 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  get idFunction() → <S extends core::Object? = dynamic>(S%) → S%
+    return #C1;
+  get dynFunction() → dynamic
+    return #C1;
+}
+static method id<T extends core::Object? = dynamic>(self::id::T% t) → self::id::T%
+  return t;
+static method main() → dynamic {
+  self::Class c = new self::Class::•();
+  let final self::Class #t1 = c in let final core::int #t2 = 0 in #t1.{self::Class::idFunction}<core::int>(#t2){(core::int) → core::int};
+  let final self::Class #t3 = c in let final core::int #t4 = 0 in #t3.{self::Class::idFunction}<core::int>(#t4){(core::int) → core::int};
+  let final self::Class #t5 = c in let final core::int #t6 = 0 in #t5.{self::Class::dynFunction}(#t6);
+}
+
+constants  {
+  #C1 = tearoff self::id
+}
diff --git a/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart.weak.outline.expect b/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart.weak.outline.expect
new file mode 100644
index 0000000..85f75fa
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart.weak.outline.expect
@@ -0,0 +1,16 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    ;
+  get idFunction() → <S extends core::Object? = dynamic>(S%) → S%
+    ;
+  get dynFunction() → dynamic
+    ;
+}
+static method id<T extends core::Object? = dynamic>(self::id::T% t) → self::id::T%
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart.weak.transformed.expect b/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart.weak.transformed.expect
new file mode 100644
index 0000000..6a431a4
--- /dev/null
+++ b/pkg/front_end/testcases/dart2js/instance_getter_invocation.dart.weak.transformed.expect
@@ -0,0 +1,31 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  get idFunction() → <S extends core::Object? = dynamic>(S%) → S%
+    return #C1;
+  get dynFunction() → dynamic
+    return #C1;
+}
+static method id<T extends core::Object? = dynamic>(self::id::T% t) → self::id::T%
+  return t;
+static method main() → dynamic {
+  self::Class c = new self::Class::•();
+  let final self::Class #t1 = c in let final core::int #t2 = 0 in #t1.{self::Class::idFunction}<core::int>(#t2){(core::int) → core::int};
+  let final self::Class #t3 = c in let final core::int #t4 = 0 in #t3.{self::Class::idFunction}<core::int>(#t4){(core::int) → core::int};
+  let final self::Class #t5 = c in let final core::int #t6 = 0 in #t5.{self::Class::dynFunction}(#t6);
+}
+
+constants  {
+  #C1 = tearoff self::id
+}
+
+Extra constant evaluation status:
+Evaluated: VariableGet @ org-dartlang-testcase:///instance_getter_invocation.dart:14:16 -> DoubleConstant(0.0)
+Evaluated: VariableGet @ org-dartlang-testcase:///instance_getter_invocation.dart:15:21 -> DoubleConstant(0.0)
+Evaluated: VariableGet @ org-dartlang-testcase:///instance_getter_invocation.dart:16:17 -> DoubleConstant(0.0)
+Extra constant evaluation: evaluated: 20, effectively constant: 3
diff --git a/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart b/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart
new file mode 100644
index 0000000..1ef505e
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart
@@ -0,0 +1,17 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+T id<T>(T t) => t;
+
+class Class {
+  S Function<S>(S) get idFunction => id;
+  dynamic get dynFunction => id;
+}
+
+main() {
+  Class c = new Class();
+  c.idFunction(0);
+  c.idFunction<int>(0);
+  c.dynFunction(0);
+}
diff --git a/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart.strong.expect b/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart.strong.expect
new file mode 100644
index 0000000..e29a84e
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart.strong.expect
@@ -0,0 +1,25 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  get idFunction() → <S extends core::Object? = dynamic>(S%) → S%
+    return #C1;
+  get dynFunction() → dynamic
+    return #C1;
+}
+static method id<T extends core::Object? = dynamic>(self::id::T% t) → self::id::T%
+  return t;
+static method main() → dynamic {
+  self::Class c = new self::Class::•();
+  let final self::Class #t1 = c in let final core::int #t2 = 0 in #t1.{self::Class::idFunction}<core::int>(#t2){(core::int) → core::int};
+  let final self::Class #t3 = c in let final core::int #t4 = 0 in #t3.{self::Class::idFunction}<core::int>(#t4){(core::int) → core::int};
+  let final self::Class #t5 = c in let final core::int #t6 = 0 in #t5.{self::Class::dynFunction}(#t6);
+}
+
+constants  {
+  #C1 = tearoff self::id
+}
diff --git a/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart.strong.transformed.expect b/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart.strong.transformed.expect
new file mode 100644
index 0000000..6a431a4
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart.strong.transformed.expect
@@ -0,0 +1,31 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  get idFunction() → <S extends core::Object? = dynamic>(S%) → S%
+    return #C1;
+  get dynFunction() → dynamic
+    return #C1;
+}
+static method id<T extends core::Object? = dynamic>(self::id::T% t) → self::id::T%
+  return t;
+static method main() → dynamic {
+  self::Class c = new self::Class::•();
+  let final self::Class #t1 = c in let final core::int #t2 = 0 in #t1.{self::Class::idFunction}<core::int>(#t2){(core::int) → core::int};
+  let final self::Class #t3 = c in let final core::int #t4 = 0 in #t3.{self::Class::idFunction}<core::int>(#t4){(core::int) → core::int};
+  let final self::Class #t5 = c in let final core::int #t6 = 0 in #t5.{self::Class::dynFunction}(#t6);
+}
+
+constants  {
+  #C1 = tearoff self::id
+}
+
+Extra constant evaluation status:
+Evaluated: VariableGet @ org-dartlang-testcase:///instance_getter_invocation.dart:14:16 -> DoubleConstant(0.0)
+Evaluated: VariableGet @ org-dartlang-testcase:///instance_getter_invocation.dart:15:21 -> DoubleConstant(0.0)
+Evaluated: VariableGet @ org-dartlang-testcase:///instance_getter_invocation.dart:16:17 -> DoubleConstant(0.0)
+Extra constant evaluation: evaluated: 20, effectively constant: 3
diff --git a/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart.textual_outline.expect b/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart.textual_outline.expect
new file mode 100644
index 0000000..9cd1271
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart.textual_outline.expect
@@ -0,0 +1,8 @@
+T id<T>(T t) => t;
+
+class Class {
+  S Function<S>(S) get idFunction => id;
+  dynamic get dynFunction => id;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..9cd1271
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart.textual_outline_modelled.expect
@@ -0,0 +1,8 @@
+T id<T>(T t) => t;
+
+class Class {
+  S Function<S>(S) get idFunction => id;
+  dynamic get dynFunction => id;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart.weak.expect b/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart.weak.expect
new file mode 100644
index 0000000..e29a84e
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart.weak.expect
@@ -0,0 +1,25 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  get idFunction() → <S extends core::Object? = dynamic>(S%) → S%
+    return #C1;
+  get dynFunction() → dynamic
+    return #C1;
+}
+static method id<T extends core::Object? = dynamic>(self::id::T% t) → self::id::T%
+  return t;
+static method main() → dynamic {
+  self::Class c = new self::Class::•();
+  let final self::Class #t1 = c in let final core::int #t2 = 0 in #t1.{self::Class::idFunction}<core::int>(#t2){(core::int) → core::int};
+  let final self::Class #t3 = c in let final core::int #t4 = 0 in #t3.{self::Class::idFunction}<core::int>(#t4){(core::int) → core::int};
+  let final self::Class #t5 = c in let final core::int #t6 = 0 in #t5.{self::Class::dynFunction}(#t6);
+}
+
+constants  {
+  #C1 = tearoff self::id
+}
diff --git a/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart.weak.outline.expect b/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart.weak.outline.expect
new file mode 100644
index 0000000..85f75fa
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart.weak.outline.expect
@@ -0,0 +1,16 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    ;
+  get idFunction() → <S extends core::Object? = dynamic>(S%) → S%
+    ;
+  get dynFunction() → dynamic
+    ;
+}
+static method id<T extends core::Object? = dynamic>(self::id::T% t) → self::id::T%
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart.weak.transformed.expect b/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart.weak.transformed.expect
new file mode 100644
index 0000000..6a431a4
--- /dev/null
+++ b/pkg/front_end/testcases/dartdevc/instance_getter_invocation.dart.weak.transformed.expect
@@ -0,0 +1,31 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class Class extends core::Object {
+  synthetic constructor •() → self::Class
+    : super core::Object::•()
+    ;
+  get idFunction() → <S extends core::Object? = dynamic>(S%) → S%
+    return #C1;
+  get dynFunction() → dynamic
+    return #C1;
+}
+static method id<T extends core::Object? = dynamic>(self::id::T% t) → self::id::T%
+  return t;
+static method main() → dynamic {
+  self::Class c = new self::Class::•();
+  let final self::Class #t1 = c in let final core::int #t2 = 0 in #t1.{self::Class::idFunction}<core::int>(#t2){(core::int) → core::int};
+  let final self::Class #t3 = c in let final core::int #t4 = 0 in #t3.{self::Class::idFunction}<core::int>(#t4){(core::int) → core::int};
+  let final self::Class #t5 = c in let final core::int #t6 = 0 in #t5.{self::Class::dynFunction}(#t6);
+}
+
+constants  {
+  #C1 = tearoff self::id
+}
+
+Extra constant evaluation status:
+Evaluated: VariableGet @ org-dartlang-testcase:///instance_getter_invocation.dart:14:16 -> DoubleConstant(0.0)
+Evaluated: VariableGet @ org-dartlang-testcase:///instance_getter_invocation.dart:15:21 -> DoubleConstant(0.0)
+Evaluated: VariableGet @ org-dartlang-testcase:///instance_getter_invocation.dart:16:17 -> DoubleConstant(0.0)
+Extra constant evaluation: evaluated: 20, effectively constant: 3
diff --git a/pkg/front_end/testcases/general/duplicate_typedef.dart b/pkg/front_end/testcases/general/duplicate_typedef.dart
new file mode 100644
index 0000000..3c409c7
--- /dev/null
+++ b/pkg/front_end/testcases/general/duplicate_typedef.dart
@@ -0,0 +1,11 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+typedef F = void Function();
+typedef F = void Function();
+
+typedef G<T> = void Function(T);
+typedef G<T> = void Function(T);
+
+main() {}
diff --git a/pkg/front_end/testcases/general/duplicate_typedef.dart.textual_outline.expect b/pkg/front_end/testcases/general/duplicate_typedef.dart.textual_outline.expect
new file mode 100644
index 0000000..6552461
--- /dev/null
+++ b/pkg/front_end/testcases/general/duplicate_typedef.dart.textual_outline.expect
@@ -0,0 +1,5 @@
+typedef F = void Function();
+typedef F = void Function();
+typedef G<T> = void Function(T);
+typedef G<T> = void Function(T);
+main() {}
diff --git a/pkg/front_end/testcases/general/duplicate_typedef.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/duplicate_typedef.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..916f4b4
--- /dev/null
+++ b/pkg/front_end/testcases/general/duplicate_typedef.dart.textual_outline_modelled.expect
@@ -0,0 +1,5 @@
+main() {}
+typedef F = void Function();
+typedef F = void Function();
+typedef G<T> = void Function(T);
+typedef G<T> = void Function(T);
diff --git a/pkg/front_end/testcases/general/duplicate_typedef.dart.weak.expect b/pkg/front_end/testcases/general/duplicate_typedef.dart.weak.expect
new file mode 100644
index 0000000..6428f44
--- /dev/null
+++ b/pkg/front_end/testcases/general/duplicate_typedef.dart.weak.expect
@@ -0,0 +1,24 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/duplicate_typedef.dart:6:9: Error: 'F' is already declared in this scope.
+// typedef F = void Function();
+//         ^
+// pkg/front_end/testcases/general/duplicate_typedef.dart:5:9: Context: Previous declaration of 'F'.
+// typedef F = void Function();
+//         ^
+//
+// pkg/front_end/testcases/general/duplicate_typedef.dart:9:9: Error: 'G' is already declared in this scope.
+// typedef G<T> = void Function(T);
+//         ^
+// pkg/front_end/testcases/general/duplicate_typedef.dart:8:9: Context: Previous declaration of 'G'.
+// typedef G<T> = void Function(T);
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef F = () → void;
+typedef G<contravariant T extends core::Object? = dynamic> = (T%) → void;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/duplicate_typedef.dart.weak.outline.expect b/pkg/front_end/testcases/general/duplicate_typedef.dart.weak.outline.expect
new file mode 100644
index 0000000..1247e17
--- /dev/null
+++ b/pkg/front_end/testcases/general/duplicate_typedef.dart.weak.outline.expect
@@ -0,0 +1,25 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/duplicate_typedef.dart:6:9: Error: 'F' is already declared in this scope.
+// typedef F = void Function();
+//         ^
+// pkg/front_end/testcases/general/duplicate_typedef.dart:5:9: Context: Previous declaration of 'F'.
+// typedef F = void Function();
+//         ^
+//
+// pkg/front_end/testcases/general/duplicate_typedef.dart:9:9: Error: 'G' is already declared in this scope.
+// typedef G<T> = void Function(T);
+//         ^
+// pkg/front_end/testcases/general/duplicate_typedef.dart:8:9: Context: Previous declaration of 'G'.
+// typedef G<T> = void Function(T);
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef F = () → void;
+typedef G<contravariant T extends core::Object? = dynamic> = (T%) → void;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/duplicate_typedef.dart.weak.transformed.expect b/pkg/front_end/testcases/general/duplicate_typedef.dart.weak.transformed.expect
new file mode 100644
index 0000000..6428f44
--- /dev/null
+++ b/pkg/front_end/testcases/general/duplicate_typedef.dart.weak.transformed.expect
@@ -0,0 +1,24 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/duplicate_typedef.dart:6:9: Error: 'F' is already declared in this scope.
+// typedef F = void Function();
+//         ^
+// pkg/front_end/testcases/general/duplicate_typedef.dart:5:9: Context: Previous declaration of 'F'.
+// typedef F = void Function();
+//         ^
+//
+// pkg/front_end/testcases/general/duplicate_typedef.dart:9:9: Error: 'G' is already declared in this scope.
+// typedef G<T> = void Function(T);
+//         ^
+// pkg/front_end/testcases/general/duplicate_typedef.dart:8:9: Context: Previous declaration of 'G'.
+// typedef G<T> = void Function(T);
+//         ^
+//
+import self as self;
+import "dart:core" as core;
+
+typedef F = () → void;
+typedef G<contravariant T extends core::Object? = dynamic> = (T%) → void;
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/duplicated_bad_prefix.dart b/pkg/front_end/testcases/general/duplicated_bad_prefix.dart
index bd5afe3..06ff79b 100644
--- a/pkg/front_end/testcases/general/duplicated_bad_prefix.dart
+++ b/pkg/front_end/testcases/general/duplicated_bad_prefix.dart
@@ -1,7 +1,9 @@
 // Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
 // @dart=2.9
+
 import 'duplicated_bad_prefix_lib1.dart' as dupe;
 import 'duplicated_bad_prefix_lib2.dart' as dupe;
 
diff --git a/pkg/front_end/testcases/general/duplicated_bad_prefix.dart.weak.expect b/pkg/front_end/testcases/general/duplicated_bad_prefix.dart.weak.expect
index 44ea56a..c5b39f8 100644
--- a/pkg/front_end/testcases/general/duplicated_bad_prefix.dart.weak.expect
+++ b/pkg/front_end/testcases/general/duplicated_bad_prefix.dart.weak.expect
@@ -2,22 +2,22 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:10:7: Error: 'Dupe' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:12:7: Error: 'Dupe' is already declared in this scope.
 // class Dupe {}
 //       ^^^^
-// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:8:7: Context: Previous declaration of 'Dupe'.
+// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:10:7: Context: Previous declaration of 'Dupe'.
 // class Dupe {}
 //       ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:13:3: Error: Type 'Dupe.a' not found.
+// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:15:3: Error: Type 'Dupe.a' not found.
 //   Dupe.a b;
 //   ^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:6:45: Error: 'C' is imported from both 'pkg/front_end/testcases/general/duplicated_bad_prefix_lib1.dart' and 'pkg/front_end/testcases/general/duplicated_bad_prefix_lib2.dart'.
+// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:8:45: Error: 'C' is imported from both 'pkg/front_end/testcases/general/duplicated_bad_prefix_lib1.dart' and 'pkg/front_end/testcases/general/duplicated_bad_prefix_lib2.dart'.
 // import 'duplicated_bad_prefix_lib2.dart' as dupe;
 //                                             ^
 //
-// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:13:3: Error: 'Dupe.a' isn't a type.
+// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:15:3: Error: 'Dupe.a' isn't a type.
 //   Dupe.a b;
 //   ^^^^^^
 //
diff --git a/pkg/front_end/testcases/general/duplicated_bad_prefix.dart.weak.outline.expect b/pkg/front_end/testcases/general/duplicated_bad_prefix.dart.weak.outline.expect
index 4f7744f..5531431 100644
--- a/pkg/front_end/testcases/general/duplicated_bad_prefix.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/duplicated_bad_prefix.dart.weak.outline.expect
@@ -2,18 +2,18 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:10:7: Error: 'Dupe' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:12:7: Error: 'Dupe' is already declared in this scope.
 // class Dupe {}
 //       ^^^^
-// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:8:7: Context: Previous declaration of 'Dupe'.
+// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:10:7: Context: Previous declaration of 'Dupe'.
 // class Dupe {}
 //       ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:13:3: Error: Type 'Dupe.a' not found.
+// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:15:3: Error: Type 'Dupe.a' not found.
 //   Dupe.a b;
 //   ^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:6:45: Error: 'C' is imported from both 'pkg/front_end/testcases/general/duplicated_bad_prefix_lib1.dart' and 'pkg/front_end/testcases/general/duplicated_bad_prefix_lib2.dart'.
+// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:8:45: Error: 'C' is imported from both 'pkg/front_end/testcases/general/duplicated_bad_prefix_lib1.dart' and 'pkg/front_end/testcases/general/duplicated_bad_prefix_lib2.dart'.
 // import 'duplicated_bad_prefix_lib2.dart' as dupe;
 //                                             ^
 //
diff --git a/pkg/front_end/testcases/general/duplicated_bad_prefix.dart.weak.transformed.expect b/pkg/front_end/testcases/general/duplicated_bad_prefix.dart.weak.transformed.expect
index 44ea56a..c5b39f8 100644
--- a/pkg/front_end/testcases/general/duplicated_bad_prefix.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/duplicated_bad_prefix.dart.weak.transformed.expect
@@ -2,22 +2,22 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:10:7: Error: 'Dupe' is already declared in this scope.
+// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:12:7: Error: 'Dupe' is already declared in this scope.
 // class Dupe {}
 //       ^^^^
-// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:8:7: Context: Previous declaration of 'Dupe'.
+// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:10:7: Context: Previous declaration of 'Dupe'.
 // class Dupe {}
 //       ^^^^
 //
-// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:13:3: Error: Type 'Dupe.a' not found.
+// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:15:3: Error: Type 'Dupe.a' not found.
 //   Dupe.a b;
 //   ^^^^^^
 //
-// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:6:45: Error: 'C' is imported from both 'pkg/front_end/testcases/general/duplicated_bad_prefix_lib1.dart' and 'pkg/front_end/testcases/general/duplicated_bad_prefix_lib2.dart'.
+// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:8:45: Error: 'C' is imported from both 'pkg/front_end/testcases/general/duplicated_bad_prefix_lib1.dart' and 'pkg/front_end/testcases/general/duplicated_bad_prefix_lib2.dart'.
 // import 'duplicated_bad_prefix_lib2.dart' as dupe;
 //                                             ^
 //
-// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:13:3: Error: 'Dupe.a' isn't a type.
+// pkg/front_end/testcases/general/duplicated_bad_prefix.dart:15:3: Error: 'Dupe.a' isn't a type.
 //   Dupe.a b;
 //   ^^^^^^
 //
diff --git a/pkg/front_end/testcases/implicit_getter_calls/getter_call.dart.weak.expect b/pkg/front_end/testcases/implicit_getter_calls/getter_call.dart.weak.expect
index ce47bb9..2b4c9cc 100644
--- a/pkg/front_end/testcases/implicit_getter_calls/getter_call.dart.weak.expect
+++ b/pkg/front_end/testcases/implicit_getter_calls/getter_call.dart.weak.expect
@@ -153,21 +153,21 @@
 }
 static method callGetter(self::Class* c) → dynamic {
   self::expect(0, c.{self::Class::getter1a}());
-  self::expect(0, c.{self::Class::getter1b}());
-  self::expect(42.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t31 = c in let final core::int* #t32 = self::read(42) in #t31.{self::Class::getter2}(#t32));
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t33 = c in let final core::int* #t34 = self::read(12) in let final core::int* #t35 = self::read(23) in #t33.{self::Class::getter3}(#t34, #t35));
-  self::expect(12, let final self::Class* #t36 = c in let final core::int* #t37 = self::read(12) in #t36.{self::Class::getter4}(#t37));
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t38 = c in let final core::int* #t39 = self::read(12) in let final core::int* #t40 = self::read(23) in #t38.{self::Class::getter4}(#t39, #t40));
-  self::expect(0, c.{self::Class::getter5}());
-  self::expect(12, let final self::Class* #t41 = c in let final core::int* #t42 = self::read(12) in #t41.{self::Class::getter5}(#t42));
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t43 = c in let final core::int* #t44 = self::read(12) in let final core::int* #t45 = self::read(23) in #t43.{self::Class::getter5}(#t44, #t45));
-  self::expect(12, let final self::Class* #t46 = c in let final core::int* #t47 = self::read(12) in #t46.{self::Class::getter6}(#t47));
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t48 = c in let final core::int* #t49 = self::read(12) in let final core::int* #t50 = self::read(23) in #t48.{self::Class::getter6}(#t49, b: #t50));
-  self::expect(0, c.{self::Class::getter7}());
-  self::expect(12, let final self::Class* #t51 = c in let final core::int* #t52 = self::read(12) in #t51.{self::Class::getter7}(a: #t52));
-  self::expect(23.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t53 = c in let final core::int* #t54 = self::read(23) in #t53.{self::Class::getter7}(b: #t54));
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t55 = c in let final core::int* #t56 = self::read(12) in let final core::int* #t57 = self::read(23) in #t55.{self::Class::getter7}(a: #t56, b: #t57));
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t58 = c in let final core::int* #t59 = self::read(23) in let final core::int* #t60 = self::read(12) in #t58.{self::Class::getter7}(b: #t59, a: #t60));
+  self::expect(0, c.{self::Class::getter1b}(){() →* core::int*});
+  self::expect(42.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t31 = c in let final core::int* #t32 = self::read(42) in #t31.{self::Class::getter2}(#t32){(core::int*) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t33 = c in let final core::int* #t34 = self::read(12) in let final core::int* #t35 = self::read(23) in #t33.{self::Class::getter3}(#t34, #t35){(core::int*, core::int*) →* core::int*});
+  self::expect(12, let final self::Class* #t36 = c in let final core::int* #t37 = self::read(12) in #t36.{self::Class::getter4}(#t37){(core::int*, [core::int*]) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t38 = c in let final core::int* #t39 = self::read(12) in let final core::int* #t40 = self::read(23) in #t38.{self::Class::getter4}(#t39, #t40){(core::int*, [core::int*]) →* core::int*});
+  self::expect(0, c.{self::Class::getter5}(){([core::int*, core::int*]) →* core::int*});
+  self::expect(12, let final self::Class* #t41 = c in let final core::int* #t42 = self::read(12) in #t41.{self::Class::getter5}(#t42){([core::int*, core::int*]) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t43 = c in let final core::int* #t44 = self::read(12) in let final core::int* #t45 = self::read(23) in #t43.{self::Class::getter5}(#t44, #t45){([core::int*, core::int*]) →* core::int*});
+  self::expect(12, let final self::Class* #t46 = c in let final core::int* #t47 = self::read(12) in #t46.{self::Class::getter6}(#t47){(core::int*, {b: core::int*}) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t48 = c in let final core::int* #t49 = self::read(12) in let final core::int* #t50 = self::read(23) in #t48.{self::Class::getter6}(#t49, b: #t50){(core::int*, {b: core::int*}) →* core::int*});
+  self::expect(0, c.{self::Class::getter7}(){({a: core::int*, b: core::int*}) →* core::int*});
+  self::expect(12, let final self::Class* #t51 = c in let final core::int* #t52 = self::read(12) in #t51.{self::Class::getter7}(a: #t52){({a: core::int*, b: core::int*}) →* core::int*});
+  self::expect(23.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t53 = c in let final core::int* #t54 = self::read(23) in #t53.{self::Class::getter7}(b: #t54){({a: core::int*, b: core::int*}) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t55 = c in let final core::int* #t56 = self::read(12) in let final core::int* #t57 = self::read(23) in #t55.{self::Class::getter7}(a: #t56, b: #t57){({a: core::int*, b: core::int*}) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t58 = c in let final core::int* #t59 = self::read(23) in let final core::int* #t60 = self::read(12) in #t58.{self::Class::getter7}(b: #t59, a: #t60){({a: core::int*, b: core::int*}) →* core::int*});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   self::enableRead = true;
diff --git a/pkg/front_end/testcases/implicit_getter_calls/getter_call.dart.weak.transformed.expect b/pkg/front_end/testcases/implicit_getter_calls/getter_call.dart.weak.transformed.expect
index 25ceba5..3c6b74a 100644
--- a/pkg/front_end/testcases/implicit_getter_calls/getter_call.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/implicit_getter_calls/getter_call.dart.weak.transformed.expect
@@ -153,21 +153,21 @@
 }
 static method callGetter(self::Class* c) → dynamic {
   self::expect(0, c.{self::Class::getter1a}());
-  self::expect(0, c.{self::Class::getter1b}());
-  self::expect(42.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t31 = c in let final core::int* #t32 = self::read(42) in #t31.{self::Class::getter2}(#t32));
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t33 = c in let final core::int* #t34 = self::read(12) in let final core::int* #t35 = self::read(23) in #t33.{self::Class::getter3}(#t34, #t35));
-  self::expect(12, let final self::Class* #t36 = c in let final core::int* #t37 = self::read(12) in #t36.{self::Class::getter4}(#t37));
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t38 = c in let final core::int* #t39 = self::read(12) in let final core::int* #t40 = self::read(23) in #t38.{self::Class::getter4}(#t39, #t40));
-  self::expect(0, c.{self::Class::getter5}());
-  self::expect(12, let final self::Class* #t41 = c in let final core::int* #t42 = self::read(12) in #t41.{self::Class::getter5}(#t42));
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t43 = c in let final core::int* #t44 = self::read(12) in let final core::int* #t45 = self::read(23) in #t43.{self::Class::getter5}(#t44, #t45));
-  self::expect(12, let final self::Class* #t46 = c in let final core::int* #t47 = self::read(12) in #t46.{self::Class::getter6}(#t47));
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t48 = c in let final core::int* #t49 = self::read(12) in let final core::int* #t50 = self::read(23) in #t48.{self::Class::getter6}(#t49, b: #t50));
-  self::expect(0, c.{self::Class::getter7}());
-  self::expect(12, let final self::Class* #t51 = c in let final core::int* #t52 = self::read(12) in #t51.{self::Class::getter7}(a: #t52));
-  self::expect(23.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t53 = c in let final core::int* #t54 = self::read(23) in #t53.{self::Class::getter7}(b: #t54));
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t55 = c in let final core::int* #t56 = self::read(12) in let final core::int* #t57 = self::read(23) in #t55.{self::Class::getter7}(a: #t56, b: #t57));
-  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t58 = c in let final core::int* #t59 = self::read(23) in let final core::int* #t60 = self::read(12) in #t58.{self::Class::getter7}(b: #t59, a: #t60));
+  self::expect(0, c.{self::Class::getter1b}(){() →* core::int*});
+  self::expect(42.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t31 = c in let final core::int* #t32 = self::read(42) in #t31.{self::Class::getter2}(#t32){(core::int*) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t33 = c in let final core::int* #t34 = self::read(12) in let final core::int* #t35 = self::read(23) in #t33.{self::Class::getter3}(#t34, #t35){(core::int*, core::int*) →* core::int*});
+  self::expect(12, let final self::Class* #t36 = c in let final core::int* #t37 = self::read(12) in #t36.{self::Class::getter4}(#t37){(core::int*, [core::int*]) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t38 = c in let final core::int* #t39 = self::read(12) in let final core::int* #t40 = self::read(23) in #t38.{self::Class::getter4}(#t39, #t40){(core::int*, [core::int*]) →* core::int*});
+  self::expect(0, c.{self::Class::getter5}(){([core::int*, core::int*]) →* core::int*});
+  self::expect(12, let final self::Class* #t41 = c in let final core::int* #t42 = self::read(12) in #t41.{self::Class::getter5}(#t42){([core::int*, core::int*]) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t43 = c in let final core::int* #t44 = self::read(12) in let final core::int* #t45 = self::read(23) in #t43.{self::Class::getter5}(#t44, #t45){([core::int*, core::int*]) →* core::int*});
+  self::expect(12, let final self::Class* #t46 = c in let final core::int* #t47 = self::read(12) in #t46.{self::Class::getter6}(#t47){(core::int*, {b: core::int*}) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t48 = c in let final core::int* #t49 = self::read(12) in let final core::int* #t50 = self::read(23) in #t48.{self::Class::getter6}(#t49, b: #t50){(core::int*, {b: core::int*}) →* core::int*});
+  self::expect(0, c.{self::Class::getter7}(){({a: core::int*, b: core::int*}) →* core::int*});
+  self::expect(12, let final self::Class* #t51 = c in let final core::int* #t52 = self::read(12) in #t51.{self::Class::getter7}(a: #t52){({a: core::int*, b: core::int*}) →* core::int*});
+  self::expect(23.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t53 = c in let final core::int* #t54 = self::read(23) in #t53.{self::Class::getter7}(b: #t54){({a: core::int*, b: core::int*}) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t55 = c in let final core::int* #t56 = self::read(12) in let final core::int* #t57 = self::read(23) in #t55.{self::Class::getter7}(a: #t56, b: #t57){({a: core::int*, b: core::int*}) →* core::int*});
+  self::expect(11.{core::int::unary-}(){() →* core::int*}, let final self::Class* #t58 = c in let final core::int* #t59 = self::read(23) in let final core::int* #t60 = self::read(12) in #t58.{self::Class::getter7}(b: #t59, a: #t60){({a: core::int*, b: core::int*}) →* core::int*});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   self::enableRead = true;
diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart
index 0b0de7e..3298c90 100644
--- a/pkg/kernel/lib/ast.dart
+++ b/pkg/kernel/lib/ast.dart
@@ -5253,7 +5253,7 @@
 
   int flags = 0;
 
-  /// The static type of the invocation.
+  /// The static type of the invocation, or `dynamic` is of the type is unknown.
   ///
   /// This includes substituted type parameters from the static receiver type
   /// and generic type arguments.
@@ -5261,19 +5261,21 @@
   /// For instance
   ///
   ///    class A<T> {
-  ///      Map<T, S> map<S>(S s) { ... }
+  ///      Map<T, S> Function<S>(S) get map => ...
+  ///      dynamic get dyn => ...
   ///    }
   ///    m(A<String> a) {
   ///      a.map(0); // The function type is `Map<String, int> Function(int)`.
+  ///      a.dyn(0); // The function type is `null`.
   ///    }
   ///
-  FunctionType functionType;
+  FunctionType? functionType;
 
   Reference interfaceTargetReference;
 
   InstanceGetterInvocation(InstanceAccessKind kind, Expression receiver,
       Name name, Arguments arguments,
-      {required Procedure interfaceTarget, required FunctionType functionType})
+      {required Member interfaceTarget, required FunctionType? functionType})
       : this.byReference(kind, receiver, name, arguments,
             interfaceTargetReference:
                 getNonNullableMemberReferenceGetter(interfaceTarget),
@@ -5284,14 +5286,12 @@
       {required this.interfaceTargetReference, required this.functionType})
       // ignore: unnecessary_null_comparison
       : assert(interfaceTargetReference != null),
-        // ignore: unnecessary_null_comparison
-        assert(functionType != null),
-        assert(functionType.typeParameters.isEmpty) {
+        assert(functionType == null || functionType.typeParameters.isEmpty) {
     receiver.parent = this;
     arguments.parent = this;
   }
 
-  Member get interfaceTarget => interfaceTargetReference.asProcedure;
+  Member get interfaceTarget => interfaceTargetReference.asMember;
 
   void set interfaceTarget(Member target) {
     interfaceTargetReference = getNonNullableMemberReferenceGetter(target);
@@ -5334,7 +5334,7 @@
 
   @override
   DartType getStaticTypeInternal(StaticTypeContext context) =>
-      functionType.returnType;
+      functionType?.returnType ?? const DynamicType();
 
   @override
   R accept<R>(ExpressionVisitor<R> v) => v.visitInstanceGetterInvocation(this);
diff --git a/pkg/kernel/lib/binary/ast_from_binary.dart b/pkg/kernel/lib/binary/ast_from_binary.dart
index 15ebc86..2172314 100644
--- a/pkg/kernel/lib/binary/ast_from_binary.dart
+++ b/pkg/kernel/lib/binary/ast_from_binary.dart
@@ -2132,10 +2132,18 @@
     InstanceAccessKind kind = InstanceAccessKind.values[readByte()];
     int flags = readByte();
     int offset = readOffset();
+    Expression receiver = readExpression();
+    Name name = readName();
+    Arguments arguments = readArguments();
+    DartType functionType = readDartType();
+    // `const DynamicType()` is used to encode a missing function type.
+    assert(functionType is FunctionType || functionType is DynamicType,
+        "Unexpected function type $functionType for InstanceGetterInvocation");
+    Reference interfaceTargetReference = readNonNullInstanceMemberReference();
     return new InstanceGetterInvocation.byReference(
-        kind, readExpression(), readName(), readArguments(),
-        functionType: readDartType() as FunctionType,
-        interfaceTargetReference: readNonNullInstanceMemberReference())
+        kind, receiver, name, arguments,
+        functionType: functionType is FunctionType ? functionType : null,
+        interfaceTargetReference: interfaceTargetReference)
       ..fileOffset = offset
       ..flags = flags;
   }
diff --git a/pkg/kernel/lib/binary/ast_to_binary.dart b/pkg/kernel/lib/binary/ast_to_binary.dart
index 5b2eec7..c8c332e 100644
--- a/pkg/kernel/lib/binary/ast_to_binary.dart
+++ b/pkg/kernel/lib/binary/ast_to_binary.dart
@@ -1653,7 +1653,8 @@
     writeNode(node.receiver);
     writeName(node.name);
     writeArgumentsNode(node.arguments);
-    writeDartType(node.functionType);
+    // `const DynamicType()` is used to encode a missing function type.
+    writeDartType(node.functionType ?? const DynamicType());
     writeNonNullInstanceMemberReference(node.interfaceTargetReference);
   }
 
diff --git a/pkg/kernel/lib/clone.dart b/pkg/kernel/lib/clone.dart
index 930ff79..3f09922 100644
--- a/pkg/kernel/lib/clone.dart
+++ b/pkg/kernel/lib/clone.dart
@@ -695,7 +695,7 @@
   TreeNode visitInstanceGetterInvocation(InstanceGetterInvocation node) {
     return new InstanceGetterInvocation.byReference(
         node.kind, clone(node.receiver), node.name, clone(node.arguments),
-        functionType: visitType(node.functionType) as FunctionType,
+        functionType: visitOptionalType(node.functionType) as FunctionType,
         interfaceTargetReference: node.interfaceTargetReference);
   }
 
diff --git a/pkg/kernel/lib/text/ast_to_text.dart b/pkg/kernel/lib/text/ast_to_text.dart
index 9482f51..0718f76 100644
--- a/pkg/kernel/lib/text/ast_to_text.dart
+++ b/pkg/kernel/lib/text/ast_to_text.dart
@@ -1498,6 +1498,19 @@
     writeSymbol('}');
   }
 
+  visitInstanceGetterInvocation(InstanceGetterInvocation node) {
+    writeExpression(node.receiver, Precedence.PRIMARY);
+    writeSymbol('.');
+    writeInterfaceTarget(node.name, node.interfaceTargetReference);
+    _writeInstanceAccessKind(node.kind);
+    writeNode(node.arguments);
+    if (node.functionType != null) {
+      writeSymbol('{');
+      writeType(node.functionType!);
+      writeSymbol('}');
+    }
+  }
+
   visitEqualsCall(EqualsCall node) {
     int precedence = Precedence.EQUALITY;
     writeExpression(node.left, precedence);
diff --git a/pkg/kernel/lib/text/text_serializer.dart b/pkg/kernel/lib/text/text_serializer.dart
index 0f936bf..86e8127 100644
--- a/pkg/kernel/lib/text/text_serializer.dart
+++ b/pkg/kernel/lib/text/text_serializer.dart
@@ -84,6 +84,8 @@
   String visitSuperPropertySet(SuperPropertySet _) => "set-super";
   String visitMethodInvocation(MethodInvocation _) => "invoke-method";
   String visitInstanceInvocation(InstanceInvocation _) => "invoke-instance";
+  String visitInstanceGetterInvocation(InstanceGetterInvocation _) =>
+      "invoke-instance-getter";
   String visitDynamicInvocation(DynamicInvocation _) => "invoke-dynamic";
   String visitFunctionInvocation(FunctionInvocation _) => "invoke-function";
   String visitLocalFunctionInvocation(LocalFunctionInvocation _) =>
@@ -656,6 +658,43 @@
       functionType: tuple.sixth as FunctionType);
 }
 
+TextSerializer<
+    InstanceGetterInvocation> instanceGetterInvocationSerializer = new Wrapped<
+        Tuple6<InstanceAccessKind, Expression, Name, Arguments, CanonicalName,
+            DartType?>,
+        InstanceGetterInvocation>(
+    unwrapInstanceGetterInvocation,
+    wrapInstanceGetterInvocation,
+    new Tuple6Serializer(
+        instanceAccessKindSerializer,
+        expressionSerializer,
+        nameSerializer,
+        argumentsSerializer,
+        const CanonicalNameSerializer(),
+        Optional(dartTypeSerializer)));
+
+Tuple6<InstanceAccessKind, Expression, Name, Arguments, CanonicalName,
+        DartType?>
+    unwrapInstanceGetterInvocation(InstanceGetterInvocation expression) {
+  return new Tuple6(
+      expression.kind,
+      expression.receiver,
+      expression.name,
+      expression.arguments,
+      expression.interfaceTargetReference.canonicalName!,
+      expression.functionType);
+}
+
+InstanceGetterInvocation wrapInstanceGetterInvocation(
+    Tuple6<InstanceAccessKind, Expression, Name, Arguments, CanonicalName,
+            DartType?>
+        tuple) {
+  return new InstanceGetterInvocation.byReference(
+      tuple.first, tuple.second, tuple.third, tuple.fourth,
+      interfaceTargetReference: tuple.fifth.reference,
+      functionType: tuple.sixth as FunctionType?);
+}
+
 const Map<DynamicAccessKind, String> dynamicAccessKindToName = const {
   DynamicAccessKind.Dynamic: "dynamic",
   DynamicAccessKind.Never: "never",
@@ -2513,6 +2552,7 @@
     "set-super": superPropertySetSerializer,
     "invoke-method": methodInvocationSerializer,
     "invoke-instance": instanceInvocationSerializer,
+    "invoke-instance-getter": instanceGetterInvocationSerializer,
     "invoke-dynamic": dynamicInvocationSerializer,
     "invoke-function": functionInvocationSerializer,
     "invoke-local-function": localFunctionInvocationSerializer,
diff --git a/pkg/nnbd_migration/lib/src/preview/preview_site.dart b/pkg/nnbd_migration/lib/src/preview/preview_site.dart
index bd690a9..d648ad7 100644
--- a/pkg/nnbd_migration/lib/src/preview/preview_site.dart
+++ b/pkg/nnbd_migration/lib/src/preview/preview_site.dart
@@ -497,8 +497,16 @@
       if (!file.path.endsWith('.dart')) {
         continue;
       }
+      var unitInfo = unitInfoMap[file.path];
+      if (unitInfo == null) {
+        // No disk content was recorded for this path at the time migration was
+        // performed.  This usually happens because the file is an unreferenced
+        // part (and therefore it didn't contribute to the migration at all). So
+        // just skip this file.
+        continue;
+      }
       var code = file.exists ? file.readAsStringSync() : '';
-      if (!unitInfoMap[file.path].hadDiskContent(code)) {
+      if (!unitInfo.hadDiskContent(code)) {
         throw StateError('Cannot apply migration. Files on disk do not match'
             ' the expected pre-migration state. Press the "rerun from sources"'
             ' button and then try again. (Changed file path is ${file.path})');
diff --git a/pkg/nnbd_migration/test/migration_cli_test.dart b/pkg/nnbd_migration/test/migration_cli_test.dart
index f065da9..5758e9a 100644
--- a/pkg/nnbd_migration/test/migration_cli_test.dart
+++ b/pkg/nnbd_migration/test/migration_cli_test.dart
@@ -125,16 +125,6 @@
   }
 
   @override
-  void listenForSignalInterrupt() {
-    if (_runWhilePreviewServerActive == null) {
-      fail('Preview server not expected to have been started');
-    }
-    sigIntSignalled = Completer();
-    _runWhilePreviewServerActive.call().then((_) => sigIntSignalled.complete());
-    _runWhilePreviewServerActive = null;
-  }
-
-  @override
   Object computeBindAddress() {
     var address = super.computeBindAddress();
     if (Platform.environment.containsKey('FORCE_IPV6') &&
@@ -176,6 +166,16 @@
     }
   }
 
+  @override
+  void listenForSignalInterrupt() {
+    if (_runWhilePreviewServerActive == null) {
+      fail('Preview server not expected to have been started');
+    }
+    sigIntSignalled = Completer();
+    _runWhilePreviewServerActive.call().then((_) => sigIntSignalled.complete());
+    _runWhilePreviewServerActive = null;
+  }
+
   Future<void> runWithPreviewServer(Future<void> Function() callback) async {
     _runWhilePreviewServerActive = callback;
     await run();
@@ -1002,6 +1002,31 @@
     });
   }
 
+  test_lifecycle_preview_apply_changes_unreferenced_part() async {
+    var projectContents = simpleProject()
+      ..['lib/unreferenced_part.dart'] = '''
+part of foo;
+
+int f() => null;
+''';
+    var projectDir = createProjectDir(projectContents);
+    var cli = _createCli();
+    bool applyHookCalled = false;
+    cli._onApplyHook = () {
+      expect(applyHookCalled, false);
+      applyHookCalled = true;
+      // Changes should have been made
+      assertProjectContents(projectDir, simpleProject(migrated: true));
+    };
+    await runWithPreviewServer(cli, [projectDir], (url) async {
+      expect(
+          logger.stdoutBuffer.toString(), contains('No analysis issues found'));
+      await assertPreviewServerResponsive(url);
+      await _tellPreviewToApplyChanges(url);
+      expect(applyHookCalled, true);
+    });
+  }
+
   test_lifecycle_preview_extra_forward_slash() async {
     var projectDir = createProjectDir(simpleProject());
     var cli = _createCli();
diff --git a/pkg/vm_service/CHANGELOG.md b/pkg/vm_service/CHANGELOG.md
index 97d2b78..14c5d1e 100644
--- a/pkg/vm_service/CHANGELOG.md
+++ b/pkg/vm_service/CHANGELOG.md
@@ -1,6 +1,7 @@
 # Changelog
 ## 6.1.1
 - Callsite `StackTrace`s are now attached to `RPCError`s and `SentinelException`s.
+- Added `identityHashCode` property to `InstanceRef` and `Instance`.
 
 ## 6.1.0+1
 - Documentation update.
diff --git a/pkg/vm_service/example/vm_service_assert.dart b/pkg/vm_service/example/vm_service_assert.dart
index 040f653..7122a12 100644
--- a/pkg/vm_service/example/vm_service_assert.dart
+++ b/pkg/vm_service/example/vm_service_assert.dart
@@ -605,6 +605,7 @@
   assertNotNull(obj);
   assertString(obj.id!);
   assertInstanceKind(obj.kind!);
+  assertInt(obj.identityHashCode!);
   assertClassRef(obj.classRef!);
   return obj;
 }
@@ -620,6 +621,7 @@
   assertNotNull(obj);
   assertString(obj.id!);
   assertInstanceKind(obj.kind!);
+  assertInt(obj.identityHashCode!);
   assertClassRef(obj.classRef!);
   return obj;
 }
@@ -831,6 +833,7 @@
   assertNotNull(obj);
   assertString(obj.id!);
   assertInstanceKind(obj.kind!);
+  assertInt(obj.identityHashCode!);
   assertClassRef(obj.classRef!);
   assertString(obj.valueAsString!);
   return obj;
@@ -847,6 +850,7 @@
   assertNotNull(obj);
   assertString(obj.id!);
   assertInstanceKind(obj.kind!);
+  assertInt(obj.identityHashCode!);
   assertClassRef(obj.classRef!);
   assertString(obj.valueAsString!);
   return obj;
diff --git a/pkg/vm_service/java/version.properties b/pkg/vm_service/java/version.properties
index bdd96e7..452573e 100644
--- a/pkg/vm_service/java/version.properties
+++ b/pkg/vm_service/java/version.properties
@@ -1 +1 @@
-version=3.43
+version=3.44
diff --git a/pkg/vm_service/lib/src/vm_service.dart b/pkg/vm_service/lib/src/vm_service.dart
index 00b1716..ea6a751 100644
--- a/pkg/vm_service/lib/src/vm_service.dart
+++ b/pkg/vm_service/lib/src/vm_service.dart
@@ -26,7 +26,7 @@
         HeapSnapshotObjectNoData,
         HeapSnapshotObjectNullData;
 
-const String vmServiceVersion = '3.43.0';
+const String vmServiceVersion = '3.44.0';
 
 /// @optional
 const String optional = 'optional';
@@ -4412,6 +4412,11 @@
   /// What kind of instance is this?
   /*InstanceKind*/ String? kind;
 
+  /// The identityHashCode assigned to the allocated object. This hash code is
+  /// the same as the hash code provided in HeapSnapshot and CpuSample's
+  /// returned by getAllocationTraces().
+  int? identityHashCode;
+
   /// Instance references always include their class.
   ClassRef? classRef;
 
@@ -4528,6 +4533,7 @@
 
   InstanceRef({
     required this.kind,
+    required this.identityHashCode,
     required this.classRef,
     required String id,
     this.valueAsString,
@@ -4548,6 +4554,7 @@
 
   InstanceRef._fromJson(Map<String, dynamic> json) : super._fromJson(json) {
     kind = json['kind'] ?? '';
+    identityHashCode = json['identityHashCode'] ?? -1;
     classRef =
         createServiceObject(json['class']!, const ['ClassRef']) as ClassRef;
     valueAsString = json['valueAsString'];
@@ -4583,6 +4590,7 @@
     json['type'] = type;
     json.addAll({
       'kind': kind,
+      'identityHashCode': identityHashCode,
       'class': classRef?.toJson(),
     });
     _setIfNotNull(json, 'valueAsString', valueAsString);
@@ -4604,8 +4612,9 @@
 
   operator ==(other) => other is InstanceRef && id == other.id;
 
-  String toString() =>
-      '[InstanceRef id: ${id}, kind: ${kind}, classRef: ${classRef}]';
+  String toString() => '[InstanceRef ' //
+      'id: ${id}, kind: ${kind}, identityHashCode: ${identityHashCode}, ' //
+      'classRef: ${classRef}]';
 }
 
 /// An `Instance` represents an instance of the Dart language class `Obj`.
@@ -4616,6 +4625,11 @@
   /// What kind of instance is this?
   /*InstanceKind*/ String? kind;
 
+  /// The identityHashCode assigned to the allocated object. This hash code is
+  /// the same as the hash code provided in HeapSnapshot and CpuSample's
+  /// returned by getAllocationTraces().
+  int? identityHashCode;
+
   /// Instance references always include their class.
   @override
   ClassRef? classRef;
@@ -4887,6 +4901,7 @@
 
   Instance({
     required this.kind,
+    required this.identityHashCode,
     required this.classRef,
     required String id,
     this.valueAsString,
@@ -4923,6 +4938,7 @@
 
   Instance._fromJson(Map<String, dynamic> json) : super._fromJson(json) {
     kind = json['kind'] ?? '';
+    identityHashCode = json['identityHashCode'] ?? -1;
     classRef =
         createServiceObject(json['class']!, const ['ClassRef']) as ClassRef;
     valueAsString = json['valueAsString'];
@@ -4992,6 +5008,7 @@
     json['type'] = type;
     json.addAll({
       'kind': kind,
+      'identityHashCode': identityHashCode,
       'class': classRef?.toJson(),
     });
     _setIfNotNull(json, 'valueAsString', valueAsString);
@@ -5029,8 +5046,9 @@
 
   operator ==(other) => other is Instance && id == other.id;
 
-  String toString() =>
-      '[Instance id: ${id}, kind: ${kind}, classRef: ${classRef}]';
+  String toString() => '[Instance ' //
+      'id: ${id}, kind: ${kind}, identityHashCode: ${identityHashCode}, ' //
+      'classRef: ${classRef}]';
 }
 
 /// `IsolateRef` is a reference to an `Isolate` object.
@@ -5985,6 +6003,7 @@
     required this.valueAsString,
   }) : super(
           id: 'instance/null',
+          identityHashCode: 0,
           kind: InstanceKind.kNull,
           classRef: ClassRef(
             id: 'class/null',
@@ -6014,7 +6033,8 @@
   operator ==(other) => other is NullValRef && id == other.id;
 
   String toString() => '[NullValRef ' //
-      'id: ${id}, kind: ${kind}, classRef: ${classRef}, valueAsString: ${valueAsString}]';
+      'id: ${id}, kind: ${kind}, identityHashCode: ${identityHashCode}, ' //
+      'classRef: ${classRef}, valueAsString: ${valueAsString}]';
 }
 
 /// A `NullVal` object represents the Dart language value null.
@@ -6030,6 +6050,7 @@
     required this.valueAsString,
   }) : super(
           id: 'instance/null',
+          identityHashCode: 0,
           kind: InstanceKind.kNull,
           classRef: ClassRef(
             id: 'class/null',
@@ -6059,7 +6080,8 @@
   operator ==(other) => other is NullVal && id == other.id;
 
   String toString() => '[NullVal ' //
-      'id: ${id}, kind: ${kind}, classRef: ${classRef}, valueAsString: ${valueAsString}]';
+      'id: ${id}, kind: ${kind}, identityHashCode: ${identityHashCode}, ' //
+      'classRef: ${classRef}, valueAsString: ${valueAsString}]';
 }
 
 /// `ObjRef` is a reference to a `Obj`.
diff --git a/pkg/vm_service/test/get_allocation_traces_test.dart b/pkg/vm_service/test/get_allocation_traces_test.dart
index 7dd4cc7..4d12086 100644
--- a/pkg/vm_service/test/get_allocation_traces_test.dart
+++ b/pkg/vm_service/test/get_allocation_traces_test.dart
@@ -86,6 +86,18 @@
     expect(profileResponse, isNotNull);
     expect(profileResponse.samples!.length, 1);
     expect(profileResponse.samples!.first.identityHashCode != 0, true);
+
+    final instances = await service.getInstances(
+      isolate.id!,
+      fooClass.id!,
+      1,
+    );
+    expect(instances.totalCount, 1);
+    final instance = instances.instances!.first as InstanceRef;
+    expect(instance.identityHashCode != 0, isTrue);
+    expect(instance.identityHashCode,
+        profileResponse.samples!.first.identityHashCode);
+
     await service.setTraceClassAllocation(isolate.id!, fooClass.id!, false);
 
     fooClass = await service.getObject(isolate.id!, fooClass.id!) as Class;
diff --git a/pkg/vm_service/tool/dart/generate_dart.dart b/pkg/vm_service/tool/dart/generate_dart.dart
index b57d248..5e348b1 100644
--- a/pkg/vm_service/tool/dart/generate_dart.dart
+++ b/pkg/vm_service/tool/dart/generate_dart.dart
@@ -1488,6 +1488,7 @@
     } else if (name!.contains('NullVal')) {
       gen.writeln(' : super(');
       gen.writeln("id: 'instance/null',");
+      gen.writeln('identityHashCode: 0,');
       gen.writeln('kind: InstanceKind.kNull,');
       gen.writeln("classRef: ClassRef(id: 'class/null',");
       gen.writeln("name: 'Null',),");
diff --git a/pkg/vm_snapshot_analysis/test/instruction_sizes_test.dart b/pkg/vm_snapshot_analysis/test/instruction_sizes_test.dart
index ddb2ac4..5347acc 100644
--- a/pkg/vm_snapshot_analysis/test/instruction_sizes_test.dart
+++ b/pkg/vm_snapshot_analysis/test/instruction_sizes_test.dart
@@ -50,6 +50,12 @@
   }
 }
 
+class D {
+  static dynamic tornOff() sync* {
+    yield const K(5);
+  }
+}
+
 @pragma('vm:never-inline')
 Function tearOff(dynamic o) {
   return o.tornOff;
@@ -61,6 +67,7 @@
   }
   print(tearOff(args.isEmpty ? A() : B()));
   print(C.tornOff);
+  print(D.tornOff);
 }
 """
 };
@@ -107,6 +114,12 @@
   }
 }
 
+class D {
+  static dynamic tornOff() sync* {
+    yield const K(5);
+  }
+}
+
 @pragma('vm:never-inline')
 Function tearOff(dynamic o) {
   return o.tornOff;
@@ -116,6 +129,7 @@
   // modified
   print(tearOff(args.isEmpty ? A() : B()));
   print(C.tornOff);
+  print(D.tornOff);
 }
 """
 };
@@ -154,6 +168,12 @@
   }
 }
 
+class D {
+  static dynamic tornOff() sync* {
+    yield const K(5);
+  }
+}
+
 @pragma('vm:never-inline')
 Function tearOff(dynamic o) {
   return o.tornOff;
@@ -165,6 +185,7 @@
   }
   print(tearOff(args.isEmpty ? A() : B()));
   print(C.tornOff);
+  print(D.tornOff);
 }
 """
 };
@@ -285,6 +306,10 @@
         // with {body}.
         expect(inputDartSymbolNames['C'], contains('[tear-off] tornOff'));
 
+        // Presence of sync* modifier should not cause tear-off name to end
+        // with {body}.
+        expect(inputDartSymbolNames['D'], contains('[tear-off] tornOff'));
+
         // Check that output does not contain '[unknown stub]'
         expect(symbolRawNames[''][''], isNot(contains('[unknown stub]')),
             reason: 'All stubs must be named');
@@ -306,6 +331,7 @@
         expect(inputLib.children, contains('A'));
         expect(inputLib.children, contains('B'));
         expect(inputLib.children, contains('C'));
+        expect(inputLib.children, contains('D'));
 
         final topLevel = inputLib.children[''];
         expect(topLevel.children, contains('makeSomeClosures'));
@@ -336,6 +362,16 @@
           expect(inputLib.children['C'].children, contains(name));
           expect(inputLib.children['C'].children[name].children, isEmpty);
         }
+
+        for (var name in [
+          'tornOff{body}',
+          'tornOff{body depth 2}',
+          'tornOff',
+          '[tear-off] tornOff'
+        ]) {
+          expect(inputLib.children['D'].children, contains(name));
+          expect(inputLib.children['D'].children[name].children, isEmpty);
+        }
       });
     });
 
@@ -356,6 +392,10 @@
             bySymbol.buckets,
             contains(bySymbol.bucketFor(
                 'package:input', 'package:input/input.dart', 'C', 'tornOff')));
+        expect(
+            bySymbol.buckets,
+            contains(bySymbol.bucketFor(
+                'package:input', 'package:input/input.dart', 'D', 'tornOff')));
 
         final byClass = computeHistogram(info, HistogramType.byClass);
         expect(
@@ -370,6 +410,10 @@
             byClass.buckets,
             contains(byClass.bucketFor('package:input',
                 'package:input/input.dart', 'C', 'does-not-matter')));
+        expect(
+            byClass.buckets,
+            contains(byClass.bucketFor('package:input',
+                'package:input/input.dart', 'D', 'does-not-matter')));
 
         final byLibrary = computeHistogram(info, HistogramType.byLibrary);
         expect(
@@ -538,6 +582,21 @@
             .where((n) => n.type == 'Class')
             .map((n) => n.name);
         expect(classesOwnedByC, equals(['C']));
+
+        final classD = inputLib.children['D'];
+        expect(classD.children, contains('tornOff'));
+        for (var name in ['tornOff{body}', '[tear-off] tornOff']) {
+          expect(classD.children['tornOff'].children, contains(name));
+        }
+        expect(classD.children['tornOff'].children['tornOff{body}'].children,
+            contains('tornOff{body depth 2}'));
+
+        // Verify that [ProgramInfoNode] owns its corresponding snapshot [Node].
+        final classesOwnedByD = info.snapshotInfo.snapshot.nodes
+            .where((n) => info.snapshotInfo.ownerOf(n) == classD)
+            .where((n) => n.type == 'Class')
+            .map((n) => n.name);
+        expect(classesOwnedByD, equals(['D']));
       });
     });
 
@@ -592,6 +651,10 @@
             bySymbol.buckets,
             contains(bySymbol.bucketFor(
                 'package:input', 'package:input/input.dart', 'C', 'tornOff')));
+        expect(
+            bySymbol.buckets,
+            contains(bySymbol.bucketFor(
+                'package:input', 'package:input/input.dart', 'D', 'tornOff')));
 
         final byClass = computeHistogram(info, HistogramType.byClass);
         expect(
@@ -606,6 +669,10 @@
             byClass.buckets,
             contains(byClass.bucketFor('package:input',
                 'package:input/input.dart', 'C', 'does-not-matter')));
+        expect(
+            byClass.buckets,
+            contains(byClass.bucketFor('package:input',
+                'package:input/input.dart', 'D', 'does-not-matter')));
 
         final byLibrary = computeHistogram(info, HistogramType.byLibrary);
         expect(
diff --git a/runtime/observatory/tests/service/get_version_rpc_test.dart b/runtime/observatory/tests/service/get_version_rpc_test.dart
index 9596513..b63155d 100644
--- a/runtime/observatory/tests/service/get_version_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_version_rpc_test.dart
@@ -12,7 +12,7 @@
     final result = await vm.invokeRpcNoUpgrade('getVersion', {});
     expect(result['type'], 'Version');
     expect(result['major'], 3);
-    expect(result['minor'], 43);
+    expect(result['minor'], 44);
     expect(result['_privateMajor'], 0);
     expect(result['_privateMinor'], 0);
   },
diff --git a/runtime/observatory_2/tests/service_2/get_version_rpc_test.dart b/runtime/observatory_2/tests/service_2/get_version_rpc_test.dart
index 9e2bc43..e7a9528 100644
--- a/runtime/observatory_2/tests/service_2/get_version_rpc_test.dart
+++ b/runtime/observatory_2/tests/service_2/get_version_rpc_test.dart
@@ -12,7 +12,7 @@
     var result = await vm.invokeRpcNoUpgrade('getVersion', {});
     expect(result['type'], equals('Version'));
     expect(result['major'], equals(3));
-    expect(result['minor'], equals(43));
+    expect(result['minor'], equals(44));
     expect(result['_privateMajor'], equals(0));
     expect(result['_privateMinor'], equals(0));
   },
diff --git a/runtime/vm/clustered_snapshot.cc b/runtime/vm/clustered_snapshot.cc
index 81908d7..af19ffa 100644
--- a/runtime/vm/clustered_snapshot.cc
+++ b/runtime/vm/clustered_snapshot.cc
@@ -911,11 +911,11 @@
       AutoTraceObjectName(func, MakeDisambiguatedFunctionName(s, func));
       WriteFromTo(func);
       if (kind == Snapshot::kFullAOT) {
-        WriteField(func, code());
+        WriteCompressedField(func, code);
       } else if (s->kind() == Snapshot::kFullJIT) {
-        NOT_IN_PRECOMPILED(WriteField(func, unoptimized_code()));
-        WriteField(func, code());
-        WriteField(func, ic_data_array());
+        NOT_IN_PRECOMPILED(WriteCompressedField(func, unoptimized_code));
+        WriteCompressedField(func, code);
+        WriteCompressedField(func, ic_data_array);
       }
 
       if (kind != Snapshot::kFullAOT) {
@@ -1087,11 +1087,11 @@
       ClosureDataPtr data = objects_[i];
       AutoTraceObject(data);
       if (s->kind() != Snapshot::kFullAOT) {
-        WriteField(data, context_scope());
+        WriteCompressedField(data, context_scope);
       }
-      WriteField(data, parent_function());
-      WriteField(data, closure());
-      WriteField(data, default_type_arguments());
+      WriteCompressedField(data, parent_function);
+      WriteCompressedField(data, closure);
+      WriteCompressedField(data, default_type_arguments);
       s->WriteUnsigned(
           static_cast<intptr_t>(data->untag()->default_type_arguments_kind_));
     }
@@ -1268,16 +1268,16 @@
       FieldPtr field = objects_[i];
       AutoTraceObjectName(field, field->untag()->name());
 
-      WriteField(field, name());
-      WriteField(field, owner());
-      WriteField(field, type());
+      WriteCompressedField(field, name);
+      WriteCompressedField(field, owner);
+      WriteCompressedField(field, type);
       // Write out the initializer function and initial value if not in AOT.
-      WriteField(field, initializer_function());
+      WriteCompressedField(field, initializer_function);
       if (kind != Snapshot::kFullAOT) {
-        WriteField(field, guarded_list_length());
+        WriteCompressedField(field, guarded_list_length);
       }
       if (kind == Snapshot::kFullJIT) {
-        WriteField(field, dependent_code());
+        WriteCompressedField(field, dependent_code);
       }
 
       if (kind != Snapshot::kFullAOT) {
@@ -2814,7 +2814,7 @@
       AutoTraceObject(handlers);
       const intptr_t length = handlers->untag()->num_entries_;
       s->WriteUnsigned(length);
-      WriteField(handlers, handled_types_data());
+      WriteCompressedField(handlers, handled_types_data);
       for (intptr_t j = 0; j < length; j++) {
         const ExceptionHandlerInfo& info = handlers->untag()->data()[j];
         s->Write<uint32_t>(info.handler_pc_offset);
@@ -3362,7 +3362,7 @@
     for (intptr_t i = 0; i < count; i++) {
       LoadingUnitPtr unit = objects_[i];
       AutoTraceObject(unit);
-      WriteField(unit, parent());
+      WriteCompressedField(unit, parent);
       s->Write<int32_t>(unit->untag()->id_);
     }
   }
diff --git a/runtime/vm/clustered_snapshot.h b/runtime/vm/clustered_snapshot.h
index 403b206..0888bbb 100644
--- a/runtime/vm/clustered_snapshot.h
+++ b/runtime/vm/clustered_snapshot.h
@@ -502,6 +502,8 @@
 #define PushFromTo(obj, ...) s->PushFromTo(obj, ##__VA_ARGS__);
 
 #define WriteField(obj, field) s->WritePropertyRef(obj->untag()->field, #field)
+#define WriteCompressedField(obj, name)                                        \
+  s->WritePropertyRef(obj->untag()->name(), #name "_")
 
 class SerializerWritingObjectScope {
  public:
diff --git a/runtime/vm/compiler/assembler/disassembler.cc b/runtime/vm/compiler/assembler/disassembler.cc
index 9e19290..e950867 100644
--- a/runtime/vm/compiler/assembler/disassembler.cc
+++ b/runtime/vm/compiler/assembler/disassembler.cc
@@ -463,8 +463,7 @@
   TextBuffer buffer(128);
   const char* function_fullname = function.ToFullyQualifiedCString();
   buffer.Printf("%s", Function::KindToCString(function.kind()));
-  if (function.IsInvokeFieldDispatcher() ||
-      function.IsNoSuchMethodDispatcher()) {
+  if (function.HasSavedArgumentsDescriptor()) {
     const auto& args_desc_array = Array::Handle(function.saved_args_desc());
     const ArgumentsDescriptor args_desc(args_desc_array);
     buffer.AddString(", ");
diff --git a/runtime/vm/compiler/backend/il.cc b/runtime/vm/compiler/backend/il.cc
index 139eaeb..4310548 100644
--- a/runtime/vm/compiler/backend/il.cc
+++ b/runtime/vm/compiler/backend/il.cc
@@ -6202,6 +6202,8 @@
     case MethodRecognizer::kMathAsin:
     case MethodRecognizer::kMathSin:
     case MethodRecognizer::kMathCos:
+    case MethodRecognizer::kMathExp:
+    case MethodRecognizer::kMathLog:
       return 1;
     case MethodRecognizer::kDoubleMod:
     case MethodRecognizer::kMathDoublePow:
@@ -6241,6 +6243,10 @@
       return kLibcAtanRuntimeEntry;
     case MethodRecognizer::kMathAtan2:
       return kLibcAtan2RuntimeEntry;
+    case MethodRecognizer::kMathExp:
+      return kLibcExpRuntimeEntry;
+    case MethodRecognizer::kMathLog:
+      return kLibcLogRuntimeEntry;
     default:
       UNREACHABLE();
   }
diff --git a/runtime/vm/compiler/backend/il_printer.cc b/runtime/vm/compiler/backend/il_printer.cc
index 981a536..b42d9de 100644
--- a/runtime/vm/compiler/backend/il_printer.cc
+++ b/runtime/vm/compiler/backend/il_printer.cc
@@ -55,8 +55,7 @@
               Function::KindToCString(function_.kind()));
     // Output saved arguments descriptor information for dispatchers that
     // have it, so it's easy to see which dispatcher this graph represents.
-    if (function_.IsInvokeFieldDispatcher() ||
-        function_.IsNoSuchMethodDispatcher()) {
+    if (function_.HasSavedArgumentsDescriptor()) {
       const auto& args_desc_array = Array::Handle(function_.saved_args_desc());
       const ArgumentsDescriptor args_desc(args_desc_array);
       THR_Print(", %s", args_desc.ToCString());
diff --git a/runtime/vm/compiler/backend/inliner.cc b/runtime/vm/compiler/backend/inliner.cc
index 094aeab..4050f44 100644
--- a/runtime/vm/compiler/backend/inliner.cc
+++ b/runtime/vm/compiler/backend/inliner.cc
@@ -3985,6 +3985,8 @@
     case MethodRecognizer::kMathAcos:
     case MethodRecognizer::kMathAtan:
     case MethodRecognizer::kMathAtan2:
+    case MethodRecognizer::kMathExp:
+    case MethodRecognizer::kMathLog:
       return InlineMathCFunction(flow_graph, call, kind, graph_entry, entry,
                                  last, result);
 
diff --git a/runtime/vm/compiler/frontend/base_flow_graph_builder.h b/runtime/vm/compiler/frontend/base_flow_graph_builder.h
index e55d218..917e820 100644
--- a/runtime/vm/compiler/frontend/base_flow_graph_builder.h
+++ b/runtime/vm/compiler/frontend/base_flow_graph_builder.h
@@ -434,8 +434,7 @@
 
   // Returns whether this function has a saved arguments descriptor array.
   bool has_saved_args_desc_array() {
-    return function_.IsInvokeFieldDispatcher() ||
-           function_.IsNoSuchMethodDispatcher();
+    return function_.HasSavedArgumentsDescriptor();
   }
 
   // Returns the saved arguments descriptor array for functions that have them.
diff --git a/runtime/vm/compiler/frontend/scope_builder.cc b/runtime/vm/compiler/frontend/scope_builder.cc
index 14d1b20..f55386b 100644
--- a/runtime/vm/compiler/frontend/scope_builder.cc
+++ b/runtime/vm/compiler/frontend/scope_builder.cc
@@ -81,7 +81,7 @@
     enclosing_scope->set_context_level(0);
     enclosing_scope->AddVariable(receiver_variable);
     enclosing_scope->AddContextVariable(receiver_variable);
-  } else if (function.IsLocalFunction()) {
+  } else if (function.HasParent()) {
     enclosing_scope = LocalScope::RestoreOuterScope(
         ContextScope::Handle(Z, function.context_scope()));
   }
diff --git a/runtime/vm/compiler/graph_intrinsifier.cc b/runtime/vm/compiler/graph_intrinsifier.cc
index 61cf909..5397c82 100644
--- a/runtime/vm/compiler/graph_intrinsifier.cc
+++ b/runtime/vm/compiler/graph_intrinsifier.cc
@@ -962,20 +962,24 @@
   return true;
 }
 
-static bool BuildInvokeMathCFunction(BlockBuilder* builder,
+static bool BuildInvokeMathCFunction(FlowGraph* flow_graph,
                                      MethodRecognizer::Kind kind,
-                                     FlowGraph* flow_graph,
                                      intptr_t num_parameters = 1) {
   if (!FlowGraphCompiler::SupportsUnboxedDoubles()) {
     return false;
   }
+
+  GraphEntryInstr* graph_entry = flow_graph->graph_entry();
+  auto normal_entry = graph_entry->normal_entry();
+  BlockBuilder builder(flow_graph, normal_entry);
+
   ZoneGrowableArray<Value*>* args =
       new ZoneGrowableArray<Value*>(num_parameters);
 
   for (intptr_t i = 0; i < num_parameters; i++) {
-    Definition* value = builder->AddParameter(i, /*with_frame=*/false);
+    Definition* value = builder.AddParameter(i, /*with_frame=*/false);
     Definition* unboxed_value = ConvertOrUnboxDoubleParameter(
-        builder, value, i, /* is_checked = */ false);
+        &builder, value, i, /* is_checked = */ false);
     if (unboxed_value == nullptr) {
       return false;
     }
@@ -983,156 +987,84 @@
   }
 
   Definition* unboxed_result =
-      builder->AddDefinition(new InvokeMathCFunctionInstr(
-          args, DeoptId::kNone, kind, builder->Source()));
+      builder.AddDefinition(new InvokeMathCFunctionInstr(
+          args, DeoptId::kNone, kind, builder.Source()));
   Definition* result =
-      CreateBoxedResultIfNeeded(builder, unboxed_result, kUnboxedDouble);
-  builder->AddReturn(new Value(result));
+      CreateBoxedResultIfNeeded(&builder, unboxed_result, kUnboxedDouble);
+  builder.AddReturn(new Value(result));
 
   return true;
 }
 
 bool GraphIntrinsifier::Build_MathSin(FlowGraph* flow_graph) {
-  if (!FlowGraphCompiler::SupportsUnboxedDoubles()) return false;
-
-  GraphEntryInstr* graph_entry = flow_graph->graph_entry();
-  auto normal_entry = graph_entry->normal_entry();
-  BlockBuilder builder(flow_graph, normal_entry);
-
-  return BuildInvokeMathCFunction(&builder, MethodRecognizer::kMathSin,
-                                  flow_graph);
+  return BuildInvokeMathCFunction(flow_graph, MethodRecognizer::kMathSin);
 }
 
 bool GraphIntrinsifier::Build_MathCos(FlowGraph* flow_graph) {
-  if (!FlowGraphCompiler::SupportsUnboxedDoubles()) return false;
-
-  GraphEntryInstr* graph_entry = flow_graph->graph_entry();
-  auto normal_entry = graph_entry->normal_entry();
-  BlockBuilder builder(flow_graph, normal_entry);
-
-  return BuildInvokeMathCFunction(&builder, MethodRecognizer::kMathCos,
-                                  flow_graph);
+  return BuildInvokeMathCFunction(flow_graph, MethodRecognizer::kMathCos);
 }
 
 bool GraphIntrinsifier::Build_MathTan(FlowGraph* flow_graph) {
-  if (!FlowGraphCompiler::SupportsUnboxedDoubles()) return false;
-
-  GraphEntryInstr* graph_entry = flow_graph->graph_entry();
-  auto normal_entry = graph_entry->normal_entry();
-  BlockBuilder builder(flow_graph, normal_entry);
-
-  return BuildInvokeMathCFunction(&builder, MethodRecognizer::kMathTan,
-                                  flow_graph);
+  return BuildInvokeMathCFunction(flow_graph, MethodRecognizer::kMathTan);
 }
 
 bool GraphIntrinsifier::Build_MathAsin(FlowGraph* flow_graph) {
-  if (!FlowGraphCompiler::SupportsUnboxedDoubles()) return false;
-
-  GraphEntryInstr* graph_entry = flow_graph->graph_entry();
-  auto normal_entry = graph_entry->normal_entry();
-  BlockBuilder builder(flow_graph, normal_entry);
-
-  return BuildInvokeMathCFunction(&builder, MethodRecognizer::kMathAsin,
-                                  flow_graph);
+  return BuildInvokeMathCFunction(flow_graph, MethodRecognizer::kMathAsin);
 }
 
 bool GraphIntrinsifier::Build_MathAcos(FlowGraph* flow_graph) {
-  if (!FlowGraphCompiler::SupportsUnboxedDoubles()) return false;
-
-  GraphEntryInstr* graph_entry = flow_graph->graph_entry();
-  auto normal_entry = graph_entry->normal_entry();
-  BlockBuilder builder(flow_graph, normal_entry);
-
-  return BuildInvokeMathCFunction(&builder, MethodRecognizer::kMathAcos,
-                                  flow_graph);
+  return BuildInvokeMathCFunction(flow_graph, MethodRecognizer::kMathAcos);
 }
 
 bool GraphIntrinsifier::Build_MathAtan(FlowGraph* flow_graph) {
-  if (!FlowGraphCompiler::SupportsUnboxedDoubles()) return false;
-
-  GraphEntryInstr* graph_entry = flow_graph->graph_entry();
-  auto normal_entry = graph_entry->normal_entry();
-  BlockBuilder builder(flow_graph, normal_entry);
-
-  return BuildInvokeMathCFunction(&builder, MethodRecognizer::kMathAtan,
-                                  flow_graph);
+  return BuildInvokeMathCFunction(flow_graph, MethodRecognizer::kMathAtan);
 }
 
 bool GraphIntrinsifier::Build_MathAtan2(FlowGraph* flow_graph) {
-  if (!FlowGraphCompiler::SupportsUnboxedDoubles()) return false;
-
-  GraphEntryInstr* graph_entry = flow_graph->graph_entry();
-  auto normal_entry = graph_entry->normal_entry();
-  BlockBuilder builder(flow_graph, normal_entry);
-
-  return BuildInvokeMathCFunction(&builder, MethodRecognizer::kMathAtan2,
-                                  flow_graph,
+  return BuildInvokeMathCFunction(flow_graph, MethodRecognizer::kMathAtan2,
                                   /* num_parameters = */ 2);
 }
 
+bool GraphIntrinsifier::Build_MathExp(FlowGraph* flow_graph) {
+  return BuildInvokeMathCFunction(flow_graph, MethodRecognizer::kMathExp);
+}
+
+bool GraphIntrinsifier::Build_MathLog(FlowGraph* flow_graph) {
+  return BuildInvokeMathCFunction(flow_graph, MethodRecognizer::kMathLog);
+}
+
 bool GraphIntrinsifier::Build_DoubleMod(FlowGraph* flow_graph) {
-  if (!FlowGraphCompiler::SupportsUnboxedDoubles()) return false;
-
-  GraphEntryInstr* graph_entry = flow_graph->graph_entry();
-  auto normal_entry = graph_entry->normal_entry();
-  BlockBuilder builder(flow_graph, normal_entry);
-
-  return BuildInvokeMathCFunction(&builder, MethodRecognizer::kDoubleMod,
-                                  flow_graph,
+  return BuildInvokeMathCFunction(flow_graph, MethodRecognizer::kDoubleMod,
                                   /* num_parameters = */ 2);
 }
 
 bool GraphIntrinsifier::Build_DoubleCeil(FlowGraph* flow_graph) {
-  if (!FlowGraphCompiler::SupportsUnboxedDoubles()) return false;
   // TODO(johnmccutchan): On X86 this intrinsic can be written in a different
   // way.
   if (TargetCPUFeatures::double_truncate_round_supported()) return false;
 
-  GraphEntryInstr* graph_entry = flow_graph->graph_entry();
-  auto normal_entry = graph_entry->normal_entry();
-  BlockBuilder builder(flow_graph, normal_entry);
-
-  return BuildInvokeMathCFunction(&builder, MethodRecognizer::kDoubleCeil,
-                                  flow_graph);
+  return BuildInvokeMathCFunction(flow_graph, MethodRecognizer::kDoubleCeil);
 }
 
 bool GraphIntrinsifier::Build_DoubleFloor(FlowGraph* flow_graph) {
-  if (!FlowGraphCompiler::SupportsUnboxedDoubles()) return false;
   // TODO(johnmccutchan): On X86 this intrinsic can be written in a different
   // way.
   if (TargetCPUFeatures::double_truncate_round_supported()) return false;
 
-  GraphEntryInstr* graph_entry = flow_graph->graph_entry();
-  auto normal_entry = graph_entry->normal_entry();
-  BlockBuilder builder(flow_graph, normal_entry);
-
-  return BuildInvokeMathCFunction(&builder, MethodRecognizer::kDoubleFloor,
-                                  flow_graph);
+  return BuildInvokeMathCFunction(flow_graph, MethodRecognizer::kDoubleFloor);
 }
 
 bool GraphIntrinsifier::Build_DoubleTruncate(FlowGraph* flow_graph) {
-  if (!FlowGraphCompiler::SupportsUnboxedDoubles()) return false;
   // TODO(johnmccutchan): On X86 this intrinsic can be written in a different
   // way.
   if (TargetCPUFeatures::double_truncate_round_supported()) return false;
 
-  GraphEntryInstr* graph_entry = flow_graph->graph_entry();
-  auto normal_entry = graph_entry->normal_entry();
-  BlockBuilder builder(flow_graph, normal_entry);
-
-  return BuildInvokeMathCFunction(&builder, MethodRecognizer::kDoubleTruncate,
-                                  flow_graph);
+  return BuildInvokeMathCFunction(flow_graph,
+                                  MethodRecognizer::kDoubleTruncate);
 }
 
 bool GraphIntrinsifier::Build_DoubleRound(FlowGraph* flow_graph) {
-  if (!FlowGraphCompiler::SupportsUnboxedDoubles()) return false;
-
-  GraphEntryInstr* graph_entry = flow_graph->graph_entry();
-  auto normal_entry = graph_entry->normal_entry();
-  BlockBuilder builder(flow_graph, normal_entry);
-
-  return BuildInvokeMathCFunction(&builder, MethodRecognizer::kDoubleRound,
-                                  flow_graph);
+  return BuildInvokeMathCFunction(flow_graph, MethodRecognizer::kDoubleRound);
 }
 
 bool GraphIntrinsifier::Build_ImplicitGetter(FlowGraph* flow_graph) {
diff --git a/runtime/vm/compiler/recognized_methods_list.h b/runtime/vm/compiler/recognized_methods_list.h
index e9b014d..4ee61c5 100644
--- a/runtime/vm/compiler/recognized_methods_list.h
+++ b/runtime/vm/compiler/recognized_methods_list.h
@@ -289,6 +289,8 @@
   V(::, acos, MathAcos, 0xffb03167)                                            \
   V(::, atan, MathAtan, 0xf1ecb41a)                                            \
   V(::, atan2, MathAtan2, 0xff585505)                                          \
+  V(::, exp, MathExp, 0xbb87ac43)                                              \
+  V(::, log, MathLog, 0x27ec861f)                                              \
 
 #define GRAPH_TYPED_DATA_INTRINSICS_LIST(V)                                    \
   V(_Int8List, [], Int8ArrayGetIndexed, 0x281e2e42)                            \
diff --git a/runtime/vm/compiler/runtime_offsets_extracted.h b/runtime/vm/compiler/runtime_offsets_extracted.h
index 7f85e9e..3b346df 100644
--- a/runtime/vm/compiler/runtime_offsets_extracted.h
+++ b/runtime/vm/compiler/runtime_offsets_extracted.h
@@ -224,9 +224,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 368;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    696;
+    704;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    700;
+    708;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_code_offset = 120;
 static constexpr dart::compiler::target::word
@@ -251,7 +251,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 = 736;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 744;
 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;
@@ -262,7 +262,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 = 744;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 752;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 48;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
@@ -280,7 +280,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 248;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    716;
+    724;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 252;
 static constexpr dart::compiler::target::word
@@ -300,13 +300,13 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 364;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    704;
+    712;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 132;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    732;
+    740;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 44;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset = 748;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset = 756;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     68;
 static constexpr dart::compiler::target::word
@@ -348,11 +348,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 = 708;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 716;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 712;
+    Thread_saved_shadow_call_stack_offset = 720;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    720;
+    728;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 240;
 static constexpr dart::compiler::target::word
@@ -386,9 +386,9 @@
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     36;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 40;
-static constexpr dart::compiler::target::word Thread_callback_code_offset = 724;
+static constexpr dart::compiler::target::word Thread_callback_code_offset = 732;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 728;
+    Thread_callback_stack_return_offset = 736;
 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;
@@ -450,7 +450,7 @@
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        664, 668, 672, 676, 680, -1, 684, -1, 688, 692, -1, -1, -1, -1, -1, -1};
+        672, 676, 680, 684, 688, -1, 692, -1, 696, 700, -1, -1, -1, -1, -1, -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 12;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 8;
 static constexpr dart::compiler::target::word Array_InstanceSize = 12;
@@ -759,9 +759,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1408;
+    1424;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1416;
+    1432;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
@@ -787,7 +787,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 =
-    1488;
+    1504;
 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;
@@ -798,7 +798,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 = 1504;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1520;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
@@ -816,7 +816,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1448;
+    1464;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
@@ -836,14 +836,14 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 720;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1424;
+    1440;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 256;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1480;
+    1496;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1512;
+    1528;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     136;
 static constexpr dart::compiler::target::word
@@ -885,11 +885,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 = 1432;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1448;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1440;
+    Thread_saved_shadow_call_stack_offset = 1456;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1456;
+    1472;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
@@ -924,9 +924,9 @@
     72;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 80;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1464;
+    1480;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1472;
+    Thread_callback_stack_return_offset = 1488;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
     16;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
@@ -989,8 +989,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1320, 1328, 1336, 1344, -1,   -1,   1352, 1360,
-        1368, 1376, 1384, -1,   1392, 1400, -1,   -1};
+        1336, 1344, 1352, 1360, -1,   -1,   1368, 1376,
+        1384, 1392, 1400, -1,   1408, 1416, -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_InstanceSize = 24;
@@ -1297,9 +1297,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 368;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    664;
+    672;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    668;
+    676;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_code_offset = 120;
 static constexpr dart::compiler::target::word
@@ -1324,7 +1324,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 = 704;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 712;
 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;
@@ -1335,7 +1335,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 = 712;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 720;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 48;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
@@ -1353,7 +1353,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 248;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    684;
+    692;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 252;
 static constexpr dart::compiler::target::word
@@ -1373,13 +1373,13 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 364;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    672;
+    680;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 132;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    700;
+    708;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 44;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset = 716;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset = 724;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     68;
 static constexpr dart::compiler::target::word
@@ -1421,11 +1421,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 = 676;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 684;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 680;
+    Thread_saved_shadow_call_stack_offset = 688;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    688;
+    696;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 240;
 static constexpr dart::compiler::target::word
@@ -1459,9 +1459,9 @@
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     36;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 40;
-static constexpr dart::compiler::target::word Thread_callback_code_offset = 692;
+static constexpr dart::compiler::target::word Thread_callback_code_offset = 700;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 696;
+    Thread_callback_stack_return_offset = 704;
 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;
@@ -1829,9 +1829,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1472;
+    1488;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1480;
+    1496;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
@@ -1857,7 +1857,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 =
-    1552;
+    1568;
 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;
@@ -1868,7 +1868,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 = 1568;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1584;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
@@ -1886,7 +1886,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1512;
+    1528;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
@@ -1906,14 +1906,14 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 720;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1488;
+    1504;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 256;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1544;
+    1560;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1576;
+    1592;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     136;
 static constexpr dart::compiler::target::word
@@ -1955,11 +1955,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 = 1496;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1512;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1504;
+    Thread_saved_shadow_call_stack_offset = 1520;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1520;
+    1536;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
@@ -1994,9 +1994,9 @@
     72;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 80;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1528;
+    1544;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1536;
+    Thread_callback_stack_return_offset = 1552;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
     16;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
@@ -2059,9 +2059,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1320, 1328, 1336, 1344, 1352, 1360, 1368, 1376, 1384, 1392, 1400,
-        1408, 1416, 1424, 1432, -1,   -1,   -1,   -1,   1440, 1448, -1,
-        -1,   -1,   1456, 1464, -1,   -1,   -1,   -1,   -1,   -1};
+        1336, 1344, 1352, 1360, 1368, 1376, 1384, 1392, 1400, 1408, 1416,
+        1424, 1432, 1440, 1448, -1,   -1,   -1,   -1,   1456, 1464, -1,
+        -1,   -1,   1472, 1480, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_InstanceSize = 24;
@@ -2369,9 +2369,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1408;
+    1424;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1416;
+    1432;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
@@ -2397,7 +2397,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 =
-    1488;
+    1504;
 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;
@@ -2408,7 +2408,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 = 1504;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1520;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
@@ -2426,7 +2426,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1448;
+    1464;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
@@ -2446,14 +2446,14 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 720;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1424;
+    1440;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 256;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1480;
+    1496;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1512;
+    1528;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     136;
 static constexpr dart::compiler::target::word
@@ -2495,11 +2495,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 = 1432;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1448;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1440;
+    Thread_saved_shadow_call_stack_offset = 1456;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1456;
+    1472;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
@@ -2534,9 +2534,9 @@
     72;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 80;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1464;
+    1480;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1472;
+    Thread_callback_stack_return_offset = 1488;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
     16;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
@@ -2599,8 +2599,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1320, 1328, 1336, 1344, -1,   -1,   1352, 1360,
-        1368, 1376, 1384, -1,   1392, 1400, -1,   -1};
+        1336, 1344, 1352, 1360, -1,   -1,   1368, 1376,
+        1384, 1392, 1400, -1,   1408, 1416, -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_InstanceSize = 24;
@@ -2908,9 +2908,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1472;
+    1488;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1480;
+    1496;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
@@ -2936,7 +2936,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 =
-    1552;
+    1568;
 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;
@@ -2947,7 +2947,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 = 1568;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1584;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
@@ -2965,7 +2965,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1512;
+    1528;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
@@ -2985,14 +2985,14 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 720;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1488;
+    1504;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 256;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1544;
+    1560;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1576;
+    1592;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     136;
 static constexpr dart::compiler::target::word
@@ -3034,11 +3034,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 = 1496;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1512;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1504;
+    Thread_saved_shadow_call_stack_offset = 1520;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1520;
+    1536;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
@@ -3073,9 +3073,9 @@
     72;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 80;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1528;
+    1544;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1536;
+    Thread_callback_stack_return_offset = 1552;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
     16;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
@@ -3138,9 +3138,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1320, 1328, 1336, 1344, 1352, 1360, 1368, 1376, 1384, 1392, 1400,
-        1408, 1416, 1424, 1432, -1,   -1,   -1,   -1,   1440, 1448, -1,
-        -1,   -1,   1456, 1464, -1,   -1,   -1,   -1,   -1,   -1};
+        1336, 1344, 1352, 1360, 1368, 1376, 1384, 1392, 1400, 1408, 1416,
+        1424, 1432, 1440, 1448, -1,   -1,   -1,   -1,   1456, 1464, -1,
+        -1,   -1,   1472, 1480, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_InstanceSize = 24;
@@ -3446,9 +3446,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 368;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    696;
+    704;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    700;
+    708;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_code_offset = 120;
 static constexpr dart::compiler::target::word
@@ -3473,7 +3473,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 = 736;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 744;
 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;
@@ -3484,7 +3484,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 = 744;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 752;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 48;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
@@ -3502,7 +3502,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 248;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    716;
+    724;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 252;
 static constexpr dart::compiler::target::word
@@ -3522,13 +3522,13 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 364;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    704;
+    712;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 132;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    732;
+    740;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 44;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset = 748;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset = 756;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     68;
 static constexpr dart::compiler::target::word
@@ -3570,11 +3570,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 = 708;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 716;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 712;
+    Thread_saved_shadow_call_stack_offset = 720;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    720;
+    728;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 240;
 static constexpr dart::compiler::target::word
@@ -3608,9 +3608,9 @@
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     36;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 40;
-static constexpr dart::compiler::target::word Thread_callback_code_offset = 724;
+static constexpr dart::compiler::target::word Thread_callback_code_offset = 732;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 728;
+    Thread_callback_stack_return_offset = 736;
 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;
@@ -3669,7 +3669,7 @@
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        664, 668, 672, 676, 680, -1, 684, -1, 688, 692, -1, -1, -1, -1, -1, -1};
+        672, 676, 680, 684, 688, -1, 692, -1, 696, 700, -1, -1, -1, -1, -1, -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 12;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 8;
 static constexpr dart::compiler::target::word Array_InstanceSize = 12;
@@ -3975,9 +3975,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1408;
+    1424;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1416;
+    1432;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
@@ -4003,7 +4003,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 =
-    1488;
+    1504;
 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;
@@ -4014,7 +4014,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 = 1504;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1520;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
@@ -4032,7 +4032,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1448;
+    1464;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
@@ -4052,14 +4052,14 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 720;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1424;
+    1440;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 256;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1480;
+    1496;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1512;
+    1528;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     136;
 static constexpr dart::compiler::target::word
@@ -4101,11 +4101,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 = 1432;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1448;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1440;
+    Thread_saved_shadow_call_stack_offset = 1456;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1456;
+    1472;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
@@ -4140,9 +4140,9 @@
     72;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 80;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1464;
+    1480;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1472;
+    Thread_callback_stack_return_offset = 1488;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
     16;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
@@ -4202,8 +4202,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1320, 1328, 1336, 1344, -1,   -1,   1352, 1360,
-        1368, 1376, 1384, -1,   1392, 1400, -1,   -1};
+        1336, 1344, 1352, 1360, -1,   -1,   1368, 1376,
+        1384, 1392, 1400, -1,   1408, 1416, -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_InstanceSize = 24;
@@ -4507,9 +4507,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 368;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    664;
+    672;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    668;
+    676;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_code_offset = 120;
 static constexpr dart::compiler::target::word
@@ -4534,7 +4534,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 = 704;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 712;
 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;
@@ -4545,7 +4545,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 = 712;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 720;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 48;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
@@ -4563,7 +4563,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 248;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    684;
+    692;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 252;
 static constexpr dart::compiler::target::word
@@ -4583,13 +4583,13 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 364;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    672;
+    680;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 132;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    700;
+    708;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 44;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset = 716;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset = 724;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     68;
 static constexpr dart::compiler::target::word
@@ -4631,11 +4631,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 = 676;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 684;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 680;
+    Thread_saved_shadow_call_stack_offset = 688;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    688;
+    696;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 240;
 static constexpr dart::compiler::target::word
@@ -4669,9 +4669,9 @@
 static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
     36;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 40;
-static constexpr dart::compiler::target::word Thread_callback_code_offset = 692;
+static constexpr dart::compiler::target::word Thread_callback_code_offset = 700;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 696;
+    Thread_callback_stack_return_offset = 704;
 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;
@@ -5033,9 +5033,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1472;
+    1488;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1480;
+    1496;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
@@ -5061,7 +5061,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 =
-    1552;
+    1568;
 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;
@@ -5072,7 +5072,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 = 1568;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1584;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
@@ -5090,7 +5090,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1512;
+    1528;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
@@ -5110,14 +5110,14 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 720;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1488;
+    1504;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 256;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1544;
+    1560;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1576;
+    1592;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     136;
 static constexpr dart::compiler::target::word
@@ -5159,11 +5159,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 = 1496;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1512;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1504;
+    Thread_saved_shadow_call_stack_offset = 1520;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1520;
+    1536;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
@@ -5198,9 +5198,9 @@
     72;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 80;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1528;
+    1544;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1536;
+    Thread_callback_stack_return_offset = 1552;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
     16;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
@@ -5260,9 +5260,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1320, 1328, 1336, 1344, 1352, 1360, 1368, 1376, 1384, 1392, 1400,
-        1408, 1416, 1424, 1432, -1,   -1,   -1,   -1,   1440, 1448, -1,
-        -1,   -1,   1456, 1464, -1,   -1,   -1,   -1,   -1,   -1};
+        1336, 1344, 1352, 1360, 1368, 1376, 1384, 1392, 1400, 1408, 1416,
+        1424, 1432, 1440, 1448, -1,   -1,   -1,   -1,   1456, 1464, -1,
+        -1,   -1,   1472, 1480, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_InstanceSize = 24;
@@ -5567,9 +5567,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1408;
+    1424;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1416;
+    1432;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
@@ -5595,7 +5595,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 =
-    1488;
+    1504;
 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;
@@ -5606,7 +5606,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 = 1504;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1520;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
@@ -5624,7 +5624,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1448;
+    1464;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
@@ -5644,14 +5644,14 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 720;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1424;
+    1440;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 256;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1480;
+    1496;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1512;
+    1528;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     136;
 static constexpr dart::compiler::target::word
@@ -5693,11 +5693,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 = 1432;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1448;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1440;
+    Thread_saved_shadow_call_stack_offset = 1456;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1456;
+    1472;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
@@ -5732,9 +5732,9 @@
     72;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 80;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1464;
+    1480;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1472;
+    Thread_callback_stack_return_offset = 1488;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
     16;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
@@ -5794,8 +5794,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1320, 1328, 1336, 1344, -1,   -1,   1352, 1360,
-        1368, 1376, 1384, -1,   1392, 1400, -1,   -1};
+        1336, 1344, 1352, 1360, -1,   -1,   1368, 1376,
+        1384, 1392, 1400, -1,   1408, 1416, -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_InstanceSize = 24;
@@ -6100,9 +6100,9 @@
 static constexpr dart::compiler::target::word
     Thread_AllocateArray_entry_point_offset = 728;
 static constexpr dart::compiler::target::word Thread_active_exception_offset =
-    1472;
+    1488;
 static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
-    1480;
+    1496;
 static constexpr dart::compiler::target::word
     Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
@@ -6128,7 +6128,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 =
-    1552;
+    1568;
 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;
@@ -6139,7 +6139,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 = 1568;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1584;
 static constexpr dart::compiler::target::word
     Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
@@ -6157,7 +6157,7 @@
 static constexpr dart::compiler::target::word
     Thread_enter_safepoint_stub_offset = 488;
 static constexpr dart::compiler::target::word Thread_execution_state_offset =
-    1512;
+    1528;
 static constexpr dart::compiler::target::word
     Thread_exit_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
@@ -6177,14 +6177,14 @@
 static constexpr dart::compiler::target::word
     Thread_float_zerow_address_offset = 720;
 static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
-    1488;
+    1504;
 static constexpr dart::compiler::target::word
     Thread_invoke_dart_code_stub_offset = 256;
 static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
-    1544;
+    1560;
 static constexpr dart::compiler::target::word Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word Thread_isolate_group_offset =
-    1576;
+    1592;
 static constexpr dart::compiler::target::word Thread_field_table_values_offset =
     136;
 static constexpr dart::compiler::target::word
@@ -6226,11 +6226,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 = 1496;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1512;
 static constexpr dart::compiler::target::word
-    Thread_saved_shadow_call_stack_offset = 1504;
+    Thread_saved_shadow_call_stack_offset = 1520;
 static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
-    1520;
+    1536;
 static constexpr dart::compiler::target::word
     Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
@@ -6265,9 +6265,9 @@
     72;
 static constexpr dart::compiler::target::word Thread_heap_base_offset = 80;
 static constexpr dart::compiler::target::word Thread_callback_code_offset =
-    1528;
+    1544;
 static constexpr dart::compiler::target::word
-    Thread_callback_stack_return_offset = 1536;
+    Thread_callback_stack_return_offset = 1552;
 static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
     16;
 static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
@@ -6327,9 +6327,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     Thread_write_barrier_wrappers_thread_offset[] = {
-        1320, 1328, 1336, 1344, 1352, 1360, 1368, 1376, 1384, 1392, 1400,
-        1408, 1416, 1424, 1432, -1,   -1,   -1,   -1,   1440, 1448, -1,
-        -1,   -1,   1456, 1464, -1,   -1,   -1,   -1,   -1,   -1};
+        1336, 1344, 1352, 1360, 1368, 1376, 1384, 1392, 1400, 1408, 1416,
+        1424, 1432, 1440, 1448, -1,   -1,   -1,   -1,   1456, 1464, -1,
+        -1,   -1,   1472, 1480, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AbstractType_InstanceSize = 24;
 static constexpr dart::compiler::target::word ApiError_InstanceSize = 16;
 static constexpr dart::compiler::target::word Array_InstanceSize = 24;
@@ -6661,9 +6661,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 = 696;
+    AOT_Thread_active_exception_offset = 704;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 700;
+    AOT_Thread_active_stacktrace_offset = 708;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_code_offset = 120;
 static constexpr dart::compiler::target::word
@@ -6689,7 +6689,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 =
-    736;
+    744;
 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 =
@@ -6702,7 +6702,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 =
-    744;
+    752;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 48;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
@@ -6721,7 +6721,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 = 716;
+    AOT_Thread_execution_state_offset = 724;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 252;
 static constexpr dart::compiler::target::word
@@ -6741,14 +6741,14 @@
 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 = 704;
+    AOT_Thread_global_object_pool_offset = 712;
 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 = 732;
+    AOT_Thread_exit_through_ffi_offset = 740;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 44;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    748;
+    756;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 68;
 static constexpr dart::compiler::target::word
@@ -6792,11 +6792,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 = 708;
+static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 716;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 712;
+    AOT_Thread_saved_shadow_call_stack_offset = 720;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 720;
+    AOT_Thread_safepoint_state_offset = 728;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 240;
 static constexpr dart::compiler::target::word
@@ -6833,9 +6833,9 @@
     AOT_Thread_write_barrier_mask_offset = 36;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 40;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    724;
+    732;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 728;
+    AOT_Thread_callback_stack_return_offset = 736;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 8;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
@@ -6910,7 +6910,7 @@
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        664, 668, 672, 676, 680, -1, 684, -1, 688, 692, -1, -1, -1, -1, -1, -1};
+        672, 676, 680, 684, 688, -1, 692, -1, 696, 700, -1, -1, -1, -1, -1, -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     12;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 8;
@@ -7256,9 +7256,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 = 1408;
+    AOT_Thread_active_exception_offset = 1424;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1416;
+    AOT_Thread_active_stacktrace_offset = 1432;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
@@ -7284,7 +7284,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 =
-    1488;
+    1504;
 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 =
@@ -7297,7 +7297,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 =
-    1504;
+    1520;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
@@ -7316,7 +7316,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 = 1448;
+    AOT_Thread_execution_state_offset = 1464;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
@@ -7336,14 +7336,14 @@
 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 = 1424;
+    AOT_Thread_global_object_pool_offset = 1440;
 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 = 1480;
+    AOT_Thread_exit_through_ffi_offset = 1496;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1512;
+    1528;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 136;
 static constexpr dart::compiler::target::word
@@ -7388,11 +7388,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 =
-    1432;
+    1448;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1440;
+    AOT_Thread_saved_shadow_call_stack_offset = 1456;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1456;
+    AOT_Thread_safepoint_state_offset = 1472;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
@@ -7429,9 +7429,9 @@
     AOT_Thread_write_barrier_mask_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1464;
+    1480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1472;
+    AOT_Thread_callback_stack_return_offset = 1488;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 16;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
@@ -7507,8 +7507,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1320, 1328, 1336, 1344, -1,   -1,   1352, 1360,
-        1368, 1376, 1384, -1,   1392, 1400, -1,   -1};
+        1336, 1344, 1352, 1360, -1,   -1,   1368, 1376,
+        1384, 1392, 1400, -1,   1408, 1416, -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -7857,9 +7857,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 = 1472;
+    AOT_Thread_active_exception_offset = 1488;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1480;
+    AOT_Thread_active_stacktrace_offset = 1496;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
@@ -7885,7 +7885,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 =
-    1552;
+    1568;
 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 =
@@ -7898,7 +7898,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 =
-    1568;
+    1584;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
@@ -7917,7 +7917,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 = 1512;
+    AOT_Thread_execution_state_offset = 1528;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
@@ -7937,14 +7937,14 @@
 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 = 1488;
+    AOT_Thread_global_object_pool_offset = 1504;
 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 = 1544;
+    AOT_Thread_exit_through_ffi_offset = 1560;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1576;
+    1592;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 136;
 static constexpr dart::compiler::target::word
@@ -7989,11 +7989,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 =
-    1496;
+    1512;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1504;
+    AOT_Thread_saved_shadow_call_stack_offset = 1520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1520;
+    AOT_Thread_safepoint_state_offset = 1536;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
@@ -8030,9 +8030,9 @@
     AOT_Thread_write_barrier_mask_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1528;
+    1544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1536;
+    AOT_Thread_callback_stack_return_offset = 1552;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 16;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
@@ -8108,9 +8108,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1320, 1328, 1336, 1344, 1352, 1360, 1368, 1376, 1384, 1392, 1400,
-        1408, 1416, 1424, 1432, -1,   -1,   -1,   -1,   1440, 1448, -1,
-        -1,   -1,   1456, 1464, -1,   -1,   -1,   -1,   -1,   -1};
+        1336, 1344, 1352, 1360, 1368, 1376, 1384, 1392, 1400, 1408, 1416,
+        1424, 1432, 1440, 1448, -1,   -1,   -1,   -1,   1456, 1464, -1,
+        -1,   -1,   1472, 1480, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -8456,9 +8456,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 = 1408;
+    AOT_Thread_active_exception_offset = 1424;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1416;
+    AOT_Thread_active_stacktrace_offset = 1432;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
@@ -8484,7 +8484,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 =
-    1488;
+    1504;
 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 =
@@ -8497,7 +8497,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 =
-    1504;
+    1520;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
@@ -8516,7 +8516,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 = 1448;
+    AOT_Thread_execution_state_offset = 1464;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
@@ -8536,14 +8536,14 @@
 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 = 1424;
+    AOT_Thread_global_object_pool_offset = 1440;
 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 = 1480;
+    AOT_Thread_exit_through_ffi_offset = 1496;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1512;
+    1528;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 136;
 static constexpr dart::compiler::target::word
@@ -8588,11 +8588,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 =
-    1432;
+    1448;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1440;
+    AOT_Thread_saved_shadow_call_stack_offset = 1456;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1456;
+    AOT_Thread_safepoint_state_offset = 1472;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
@@ -8629,9 +8629,9 @@
     AOT_Thread_write_barrier_mask_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1464;
+    1480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1472;
+    AOT_Thread_callback_stack_return_offset = 1488;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 16;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
@@ -8707,8 +8707,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1320, 1328, 1336, 1344, -1,   -1,   1352, 1360,
-        1368, 1376, 1384, -1,   1392, 1400, -1,   -1};
+        1336, 1344, 1352, 1360, -1,   -1,   1368, 1376,
+        1384, 1392, 1400, -1,   1408, 1416, -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -9054,9 +9054,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 = 1472;
+    AOT_Thread_active_exception_offset = 1488;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1480;
+    AOT_Thread_active_stacktrace_offset = 1496;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
@@ -9082,7 +9082,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 =
-    1552;
+    1568;
 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 =
@@ -9095,7 +9095,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 =
-    1568;
+    1584;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
@@ -9114,7 +9114,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 = 1512;
+    AOT_Thread_execution_state_offset = 1528;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
@@ -9134,14 +9134,14 @@
 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 = 1488;
+    AOT_Thread_global_object_pool_offset = 1504;
 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 = 1544;
+    AOT_Thread_exit_through_ffi_offset = 1560;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1576;
+    1592;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 136;
 static constexpr dart::compiler::target::word
@@ -9186,11 +9186,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 =
-    1496;
+    1512;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1504;
+    AOT_Thread_saved_shadow_call_stack_offset = 1520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1520;
+    AOT_Thread_safepoint_state_offset = 1536;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
@@ -9227,9 +9227,9 @@
     AOT_Thread_write_barrier_mask_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1528;
+    1544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1536;
+    AOT_Thread_callback_stack_return_offset = 1552;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 16;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
@@ -9305,9 +9305,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1320, 1328, 1336, 1344, 1352, 1360, 1368, 1376, 1384, 1392, 1400,
-        1408, 1416, 1424, 1432, -1,   -1,   -1,   -1,   1440, 1448, -1,
-        -1,   -1,   1456, 1464, -1,   -1,   -1,   -1,   -1,   -1};
+        1336, 1344, 1352, 1360, 1368, 1376, 1384, 1392, 1400, 1408, 1416,
+        1424, 1432, 1440, 1448, -1,   -1,   -1,   -1,   1456, 1464, -1,
+        -1,   -1,   1472, 1480, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -9650,9 +9650,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 = 696;
+    AOT_Thread_active_exception_offset = 704;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 700;
+    AOT_Thread_active_stacktrace_offset = 708;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_code_offset = 120;
 static constexpr dart::compiler::target::word
@@ -9678,7 +9678,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 =
-    736;
+    744;
 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 =
@@ -9691,7 +9691,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 =
-    744;
+    752;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 48;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
@@ -9710,7 +9710,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 = 716;
+    AOT_Thread_execution_state_offset = 724;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 252;
 static constexpr dart::compiler::target::word
@@ -9730,14 +9730,14 @@
 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 = 704;
+    AOT_Thread_global_object_pool_offset = 712;
 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 = 732;
+    AOT_Thread_exit_through_ffi_offset = 740;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 44;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    748;
+    756;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 68;
 static constexpr dart::compiler::target::word
@@ -9781,11 +9781,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 = 708;
+static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 716;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 712;
+    AOT_Thread_saved_shadow_call_stack_offset = 720;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 720;
+    AOT_Thread_safepoint_state_offset = 728;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 240;
 static constexpr dart::compiler::target::word
@@ -9822,9 +9822,9 @@
     AOT_Thread_write_barrier_mask_offset = 36;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 40;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    724;
+    732;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 728;
+    AOT_Thread_callback_stack_return_offset = 736;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 8;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
@@ -9896,7 +9896,7 @@
     4, 12, 8, 16};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        664, 668, 672, 676, 680, -1, 684, -1, 688, 692, -1, -1, -1, -1, -1, -1};
+        672, 676, 680, 684, 688, -1, 692, -1, 696, 700, -1, -1, -1, -1, -1, -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     12;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 8;
@@ -10238,9 +10238,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 = 1408;
+    AOT_Thread_active_exception_offset = 1424;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1416;
+    AOT_Thread_active_stacktrace_offset = 1432;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
@@ -10266,7 +10266,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 =
-    1488;
+    1504;
 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 =
@@ -10279,7 +10279,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 =
-    1504;
+    1520;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
@@ -10298,7 +10298,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 = 1448;
+    AOT_Thread_execution_state_offset = 1464;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
@@ -10318,14 +10318,14 @@
 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 = 1424;
+    AOT_Thread_global_object_pool_offset = 1440;
 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 = 1480;
+    AOT_Thread_exit_through_ffi_offset = 1496;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1512;
+    1528;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 136;
 static constexpr dart::compiler::target::word
@@ -10370,11 +10370,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 =
-    1432;
+    1448;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1440;
+    AOT_Thread_saved_shadow_call_stack_offset = 1456;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1456;
+    AOT_Thread_safepoint_state_offset = 1472;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
@@ -10411,9 +10411,9 @@
     AOT_Thread_write_barrier_mask_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1464;
+    1480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1472;
+    AOT_Thread_callback_stack_return_offset = 1488;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 16;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
@@ -10486,8 +10486,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1320, 1328, 1336, 1344, -1,   -1,   1352, 1360,
-        1368, 1376, 1384, -1,   1392, 1400, -1,   -1};
+        1336, 1344, 1352, 1360, -1,   -1,   1368, 1376,
+        1384, 1392, 1400, -1,   1408, 1416, -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -10832,9 +10832,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 = 1472;
+    AOT_Thread_active_exception_offset = 1488;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1480;
+    AOT_Thread_active_stacktrace_offset = 1496;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
@@ -10860,7 +10860,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 =
-    1552;
+    1568;
 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 =
@@ -10873,7 +10873,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 =
-    1568;
+    1584;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
@@ -10892,7 +10892,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 = 1512;
+    AOT_Thread_execution_state_offset = 1528;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
@@ -10912,14 +10912,14 @@
 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 = 1488;
+    AOT_Thread_global_object_pool_offset = 1504;
 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 = 1544;
+    AOT_Thread_exit_through_ffi_offset = 1560;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1576;
+    1592;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 136;
 static constexpr dart::compiler::target::word
@@ -10964,11 +10964,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 =
-    1496;
+    1512;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1504;
+    AOT_Thread_saved_shadow_call_stack_offset = 1520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1520;
+    AOT_Thread_safepoint_state_offset = 1536;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
@@ -11005,9 +11005,9 @@
     AOT_Thread_write_barrier_mask_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1528;
+    1544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1536;
+    AOT_Thread_callback_stack_return_offset = 1552;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 16;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
@@ -11080,9 +11080,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1320, 1328, 1336, 1344, 1352, 1360, 1368, 1376, 1384, 1392, 1400,
-        1408, 1416, 1424, 1432, -1,   -1,   -1,   -1,   1440, 1448, -1,
-        -1,   -1,   1456, 1464, -1,   -1,   -1,   -1,   -1,   -1};
+        1336, 1344, 1352, 1360, 1368, 1376, 1384, 1392, 1400, 1408, 1416,
+        1424, 1432, 1440, 1448, -1,   -1,   -1,   -1,   1456, 1464, -1,
+        -1,   -1,   1472, 1480, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -11424,9 +11424,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 = 1408;
+    AOT_Thread_active_exception_offset = 1424;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1416;
+    AOT_Thread_active_stacktrace_offset = 1432;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
@@ -11452,7 +11452,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 =
-    1488;
+    1504;
 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 =
@@ -11465,7 +11465,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 =
-    1504;
+    1520;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
@@ -11484,7 +11484,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 = 1448;
+    AOT_Thread_execution_state_offset = 1464;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
@@ -11504,14 +11504,14 @@
 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 = 1424;
+    AOT_Thread_global_object_pool_offset = 1440;
 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 = 1480;
+    AOT_Thread_exit_through_ffi_offset = 1496;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1512;
+    1528;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 136;
 static constexpr dart::compiler::target::word
@@ -11556,11 +11556,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 =
-    1432;
+    1448;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1440;
+    AOT_Thread_saved_shadow_call_stack_offset = 1456;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1456;
+    AOT_Thread_safepoint_state_offset = 1472;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
@@ -11597,9 +11597,9 @@
     AOT_Thread_write_barrier_mask_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1464;
+    1480;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1472;
+    AOT_Thread_callback_stack_return_offset = 1488;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 16;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
@@ -11672,8 +11672,8 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1320, 1328, 1336, 1344, -1,   -1,   1352, 1360,
-        1368, 1376, 1384, -1,   1392, 1400, -1,   -1};
+        1336, 1344, 1352, 1360, -1,   -1,   1368, 1376,
+        1384, 1392, 1400, -1,   1408, 1416, -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -12015,9 +12015,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 = 1472;
+    AOT_Thread_active_exception_offset = 1488;
 static constexpr dart::compiler::target::word
-    AOT_Thread_active_stacktrace_offset = 1480;
+    AOT_Thread_active_stacktrace_offset = 1496;
 static constexpr dart::compiler::target::word
     AOT_Thread_array_write_barrier_code_offset = 232;
 static constexpr dart::compiler::target::word
@@ -12043,7 +12043,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 =
-    1552;
+    1568;
 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 =
@@ -12056,7 +12056,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 =
-    1568;
+    1584;
 static constexpr dart::compiler::target::word
     AOT_Thread_dispatch_table_array_offset = 96;
 static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
@@ -12075,7 +12075,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 = 1512;
+    AOT_Thread_execution_state_offset = 1528;
 static constexpr dart::compiler::target::word
     AOT_Thread_exit_safepoint_stub_offset = 496;
 static constexpr dart::compiler::target::word
@@ -12095,14 +12095,14 @@
 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 = 1488;
+    AOT_Thread_global_object_pool_offset = 1504;
 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 = 1544;
+    AOT_Thread_exit_through_ffi_offset = 1560;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 88;
 static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
-    1576;
+    1592;
 static constexpr dart::compiler::target::word
     AOT_Thread_field_table_values_offset = 136;
 static constexpr dart::compiler::target::word
@@ -12147,11 +12147,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 =
-    1496;
+    1512;
 static constexpr dart::compiler::target::word
-    AOT_Thread_saved_shadow_call_stack_offset = 1504;
+    AOT_Thread_saved_shadow_call_stack_offset = 1520;
 static constexpr dart::compiler::target::word
-    AOT_Thread_safepoint_state_offset = 1520;
+    AOT_Thread_safepoint_state_offset = 1536;
 static constexpr dart::compiler::target::word
     AOT_Thread_slow_type_test_stub_offset = 472;
 static constexpr dart::compiler::target::word
@@ -12188,9 +12188,9 @@
     AOT_Thread_write_barrier_mask_offset = 72;
 static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 80;
 static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
-    1528;
+    1544;
 static constexpr dart::compiler::target::word
-    AOT_Thread_callback_stack_return_offset = 1536;
+    AOT_Thread_callback_stack_return_offset = 1552;
 static constexpr dart::compiler::target::word
     AOT_TimelineStream_enabled_offset = 16;
 static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
@@ -12263,9 +12263,9 @@
     8, 24, 16, 32};
 static constexpr dart::compiler::target::word
     AOT_Thread_write_barrier_wrappers_thread_offset[] = {
-        1320, 1328, 1336, 1344, 1352, 1360, 1368, 1376, 1384, 1392, 1400,
-        1408, 1416, 1424, 1432, -1,   -1,   -1,   -1,   1440, 1448, -1,
-        -1,   -1,   1456, 1464, -1,   -1,   -1,   -1,   -1,   -1};
+        1336, 1344, 1352, 1360, 1368, 1376, 1384, 1392, 1400, 1408, 1416,
+        1424, 1432, 1440, 1448, -1,   -1,   -1,   -1,   1456, 1464, -1,
+        -1,   -1,   1472, 1480, -1,   -1,   -1,   -1,   -1,   -1};
 static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
     24;
 static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
diff --git a/runtime/vm/dart_entry.cc b/runtime/vm/dart_entry.cc
index ec04ca2..058d039 100644
--- a/runtime/vm/dart_entry.cc
+++ b/runtime/vm/dart_entry.cc
@@ -412,24 +412,28 @@
   return names.ptr();
 }
 
-void ArgumentsDescriptor::PrintTo(BaseTextBuffer* buffer) const {
-  buffer->Printf("%" Pd " arg%s", Count(), Count() == 1 ? "" : "s");
+void ArgumentsDescriptor::PrintTo(BaseTextBuffer* buffer,
+                                  bool show_named_positions) const {
   if (TypeArgsLen() > 0) {
-    buffer->Printf(", %" Pd " type arg%s", TypeArgsLen(),
-                   TypeArgsLen() == 1 ? "" : "s");
+    buffer->Printf("<%" Pd ">", TypeArgsLen());
   }
+  buffer->Printf("(%" Pd "", Count());
   if (NamedCount() > 0) {
-    buffer->AddString(", names [");
+    buffer->AddString(" {");
     auto& str = String::Handle();
     for (intptr_t i = 0; i < NamedCount(); i++) {
       if (i != 0) {
         buffer->AddString(", ");
       }
       str = NameAt(i);
-      buffer->Printf("'%s' (%" Pd ")", str.ToCString(), PositionAt(i));
+      buffer->Printf("%s", str.ToCString());
+      if (show_named_positions) {
+        buffer->Printf(" (%" Pd ")", PositionAt(i));
+      }
     }
-    buffer->Printf("]");
+    buffer->Printf("}");
   }
+  buffer->Printf(")");
 }
 
 const char* ArgumentsDescriptor::ToCString() const {
diff --git a/runtime/vm/dart_entry.h b/runtime/vm/dart_entry.h
index 4b5fd32..2a33464 100644
--- a/runtime/vm/dart_entry.h
+++ b/runtime/vm/dart_entry.h
@@ -46,7 +46,7 @@
   bool MatchesNameAt(intptr_t i, const String& other) const;
   // Returns array of argument names in the arguments order.
   ArrayPtr GetArgumentNames() const;
-  void PrintTo(BaseTextBuffer* buffer) const;
+  void PrintTo(BaseTextBuffer* buffer, bool show_named_positions = false) const;
   const char* ToCString() const;
 
   // Generated code support.
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index a0af589..8d31193 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -7382,11 +7382,11 @@
 }
 
 bool Function::IsInFactoryScope() const {
-  if (!IsLocalFunction()) {
+  if (!HasParent()) {
     return IsFactory();
   }
   Function& outer_function = Function::Handle(parent_function());
-  while (outer_function.IsLocalFunction()) {
+  while (outer_function.HasParent()) {
     outer_function = outer_function.parent_function();
   }
   return outer_function.IsFactory();
@@ -9408,16 +9408,31 @@
   return printer.buffer();
 }
 
-void Function::PrintName(const NameFormattingParams& params,
-                         BaseTextBuffer* printer) const {
-  // If |this| is the generated asynchronous body closure, use the
-  // name of the parent function.
-  Function& fun = Function::Handle(ptr());
-
+static void FunctionPrintNameHelper(const Function& fun,
+                                    const NameFormattingParams& params,
+                                    BaseTextBuffer* printer) {
+  if (fun.IsLocalFunction()) {
+    if (params.include_parent_name) {
+      const auto& parent = Function::Handle(fun.parent_function());
+      parent.PrintName(params, printer);
+      // A function's scrubbed name and its user visible name are identical.
+      printer->AddString(".");
+    }
+    if (params.disambiguate_names &&
+        fun.name() == Symbols::AnonymousClosure().ptr()) {
+      printer->Printf("<anonymous closure @%" Pd ">", fun.token_pos().Pos());
+    } else {
+      printer->AddString(fun.NameCString(params.name_visibility));
+    }
+    return;
+  }
   if (params.disambiguate_names) {
     if (fun.IsInvokeFieldDispatcher()) {
       printer->AddString("[invoke-field] ");
     }
+    if (fun.IsNoSuchMethodDispatcher()) {
+      printer->AddString("[no-such-method] ");
+    }
     if (fun.IsImplicitClosureFunction()) {
       printer->AddString("[tear-off] ");
     }
@@ -9426,53 +9441,13 @@
     }
   }
 
-  if (fun.IsNonImplicitClosureFunction()) {
-    // Sniff the parent function.
-    fun = fun.parent_function();
-    ASSERT(!fun.IsNull());
-    if (!fun.IsAsyncGenerator() && !fun.IsAsyncFunction() &&
-        !fun.IsSyncGenerator()) {
-      // Parent function is not the generator of an asynchronous body closure,
-      // start at |this|.
-      fun = ptr();
-    }
-  }
-  if (IsClosureFunction()) {
-    if (fun.IsLocalFunction() && !fun.IsImplicitClosureFunction()) {
-      Function& parent = Function::Handle(fun.parent_function());
-      if (parent.IsAsyncClosure() || parent.IsSyncGenClosureMaker() ||
-          parent.IsAsyncGenClosure()) {
-        // Skip the closure and use the real function name found in
-        // the parent.
-        parent = parent.parent_function();
-      }
-      if (params.include_parent_name) {
-        parent.PrintName(params, printer);
-        // A function's scrubbed name and its user visible name are identical.
-        printer->AddString(".");
-      }
-      if (params.disambiguate_names &&
-          fun.name() == Symbols::AnonymousClosure().ptr()) {
-        printer->Printf("<anonymous closure @%" Pd ">", fun.token_pos().Pos());
-      } else {
-        printer->AddString(fun.NameCString(params.name_visibility));
-      }
-      // If we skipped rewritten async/async*/sync* body then append a suffix
-      // to the end of the name.
-      if (fun.ptr() != ptr() && params.disambiguate_names) {
-        printer->AddString("{body}");
-      }
-      return;
-    }
-  }
-
   if (fun.kind() == UntaggedFunction::kConstructor) {
     printer->AddString("new ");
   } else if (params.include_class_name) {
-    const Class& cls = Class::Handle(Owner());
+    const Class& cls = Class::Handle(fun.Owner());
     if (!cls.IsTopLevel()) {
       const Class& mixin = Class::Handle(cls.Mixin());
-      printer->AddString(params.name_visibility == kUserVisibleName
+      printer->AddString(params.name_visibility == Object::kUserVisibleName
                              ? mixin.UserVisibleNameCString()
                              : cls.NameCString(params.name_visibility));
       printer->AddString(".");
@@ -9481,35 +9456,37 @@
 
   printer->AddString(fun.NameCString(params.name_visibility));
 
-  // If we skipped rewritten async/async*/sync* body then append a suffix
-  // to the end of the name.
-  if (fun.ptr() != ptr() && params.disambiguate_names) {
-    printer->AddString("{body}");
+  // Dispatchers that are created with an arguments descriptor need both the
+  // name and the saved arguments descriptor to disambiguate.
+  if (params.disambiguate_names && fun.HasSavedArgumentsDescriptor()) {
+    const auto& args_desc_array = Array::Handle(fun.saved_args_desc());
+    const ArgumentsDescriptor args_desc(args_desc_array);
+    args_desc.PrintTo(printer);
   }
+}
 
-  // Field dispatchers are specialized for an argument descriptor so there
-  // might be multiples of them with the same name but different argument
-  // descriptors. Add a suffix to disambiguate.
-  if (params.disambiguate_names && fun.IsInvokeFieldDispatcher()) {
-    printer->AddString(" ");
-    if (NumTypeParameters() != 0) {
-      printer->Printf("<%" Pd ">", fun.NumTypeParameters());
+void Function::PrintName(const NameFormattingParams& params,
+                         BaseTextBuffer* printer) const {
+  if (!IsLocalFunction()) {
+    FunctionPrintNameHelper(*this, params, printer);
+    return;
+  }
+  auto& fun = Function::Handle(ptr());
+  intptr_t fun_depth = 0;
+  // If |this| is a generated body closure, start with the closest
+  // non-generated parent function.
+  while (fun.is_generated_body()) {
+    fun = fun.parent_function();
+    fun_depth++;
+  }
+  FunctionPrintNameHelper(fun, params, printer);
+  // If we skipped generated bodies then append a suffix to the end.
+  if (fun_depth > 0 && params.disambiguate_names) {
+    printer->AddString("{body");
+    if (fun_depth > 1) {
+      printer->Printf(" depth %" Pd "", fun_depth);
     }
-    printer->AddString("(");
-    printer->Printf("%" Pd "", fun.num_fixed_parameters());
-    if (fun.NumOptionalPositionalParameters() != 0) {
-      printer->Printf(" [%" Pd "]", fun.NumOptionalPositionalParameters());
-    }
-    if (fun.HasOptionalNamedParameters()) {
-      printer->AddString(" {");
-      String& name = String::Handle();
-      for (intptr_t i = 0; i < fun.NumOptionalNamedParameters(); i++) {
-        name = fun.ParameterNameAt(fun.num_fixed_parameters() + i);
-        printer->Printf("%s%s", i > 0 ? ", " : "", name.ToCString());
-      }
-      printer->AddString("}");
-    }
-    printer->AddString(")");
+    printer->AddString("}");
   }
 }
 
@@ -9800,7 +9777,7 @@
 bool Function::PrologueNeedsArgumentsDescriptor() const {
   // These functions have a saved compile-time arguments descriptor that is
   // used in lieu of the runtime arguments descriptor in generated IL.
-  if (IsInvokeFieldDispatcher() || IsNoSuchMethodDispatcher()) {
+  if (HasSavedArgumentsDescriptor()) {
     return false;
   }
   // The prologue of those functions need to examine the arg descriptor for
@@ -9890,7 +9867,7 @@
     default:
       UNREACHABLE();
   }
-  if (IsNoSuchMethodDispatcher() || IsInvokeFieldDispatcher()) {
+  if (HasSavedArgumentsDescriptor()) {
     const auto& args_desc_array = Array::Handle(zone, saved_args_desc());
     const ArgumentsDescriptor args_desc(args_desc_array);
     buffer.AddChar('[');
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 0708f3d..0512afe 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -2724,6 +2724,10 @@
   void set_saved_args_desc(const Array& array) const;
   ArrayPtr saved_args_desc() const;
 
+  bool HasSavedArgumentsDescriptor() const {
+    return IsInvokeFieldDispatcher() || IsNoSuchMethodDispatcher();
+  }
+
   void set_accessor_field(const Field& value) const;
   FieldPtr accessor_field() const;
 
@@ -3328,8 +3332,13 @@
     return IsImplicitClosureFunction() && !is_static();
   }
 
-  // Returns true if this function represents a local function.
-  bool IsLocalFunction() const { return parent_function() != Function::null(); }
+  // Returns true if this function has a parent function.
+  bool HasParent() const { return parent_function() != Function::null(); }
+
+  // Returns true if this function is a local function.
+  bool IsLocalFunction() const {
+    return !IsImplicitClosureFunction() && HasParent();
+  }
 
   // Returns true if this function represents an ffi trampoline.
   bool IsFfiTrampoline() const {
@@ -3438,7 +3447,7 @@
   //      }
   //   }
   bool IsSyncGenClosure() const {
-    return (parent_function() != Function::null()) &&
+    return is_generated_body() &&
            Function::Handle(parent_function()).IsSyncGenClosureMaker();
   }
 
diff --git a/runtime/vm/object_service.cc b/runtime/vm/object_service.cc
index 3989db4..9edd135 100644
--- a/runtime/vm/object_service.cc
+++ b/runtime/vm/object_service.cc
@@ -7,6 +7,7 @@
 #include "vm/compiler/assembler/disassembler.h"
 #include "vm/debugger.h"
 #include "vm/object.h"
+#include "vm/object_graph.h"
 #include "vm/object_store.h"
 #include "vm/resolver.h"
 #include "vm/stub_code.h"
@@ -998,6 +999,12 @@
 
 void Instance::PrintSharedInstanceJSON(JSONObject* jsobj, bool ref) const {
   AddCommonObjectProperties(jsobj, "Instance", ref);
+  {
+    NoSafepointScope safepoint_scope;
+    uint32_t hash_code = HeapSnapshotWriter::GetHeapSnapshotIdentityHash(
+        Thread::Current(), ptr());
+    jsobj->AddProperty64("identityHashCode", hash_code);
+  }
   if (ref) {
     return;
   }
diff --git a/runtime/vm/object_test.cc b/runtime/vm/object_test.cc
index 67656c6..8d94071 100644
--- a/runtime/vm/object_test.cc
+++ b/runtime/vm/object_test.cc
@@ -4452,6 +4452,7 @@
         "\"_vmType\":\"Bool\","
         "\"class\":{\"type\":\"@Class\",\"fixedId\":true,\"id\":\"\","
         "\"name\":\"bool\"},"
+        "\"identityHashCode\":0,"
         "\"kind\":\"Bool\","
         "\"fixedId\":true,"
         "\"id\":\"objects\\/bool-true\",\"valueAsString\":\"true\"}",
@@ -4470,6 +4471,7 @@
         "\"class\":{\"type\":\"@Class\",\"fixedId\":true,\"id\":\"\","
         "\"name\":\"_Smi\","
         "\"_vmName\":\"\"},"
+        "\"identityHashCode\":0,"
         "\"kind\":\"Int\","
         "\"fixedId\":true,"
         "\"id\":\"objects\\/int-7\",\"valueAsString\":\"7\"}",
@@ -4488,6 +4490,7 @@
         "\"_vmType\":\"Mint\","
         "\"class\":{\"type\":\"@Class\",\"fixedId\":true,\"id\":\"\","
         "\"name\":\"_Mint\",\"_vmName\":\"\"},"
+        "\"identityHashCode\":0,"
         "\"kind\":\"Int\","
         "\"id\":\"\",\"valueAsString\":\"-9223372036854775808\"}",
         buffer);
@@ -4505,6 +4508,7 @@
         "\"_vmType\":\"Double\","
         "\"class\":{\"type\":\"@Class\",\"fixedId\":true,\"id\":\"\","
         "\"name\":\"_Double\",\"_vmName\":\"\"},"
+        "\"identityHashCode\":0,"
         "\"kind\":\"Double\","
         "\"id\":\"\",\"valueAsString\":\"0.1234\"}",
         buffer);
@@ -4522,6 +4526,7 @@
         "\"_vmType\":\"String\","
         "\"class\":{\"type\":\"@Class\",\"fixedId\":true,\"id\":\"\","
         "\"name\":\"_OneByteString\",\"_vmName\":\"\"},"
+        "\"identityHashCode\":0,"
         "\"kind\":\"String\","
         "\"id\":\"\",\"length\":2,\"valueAsString\":\"dw\"}",
         buffer);
@@ -4539,6 +4544,7 @@
         "\"_vmType\":\"Array\","
         "\"class\":{\"type\":\"@Class\",\"fixedId\":true,\"id\":\"\","
         "\"name\":\"_List\",\"_vmName\":\"\"},"
+        "\"identityHashCode\":0,"
         "\"kind\":\"List\","
         "\"id\":\"\",\"length\":0}",
         buffer);
@@ -4558,6 +4564,7 @@
         "\"class\":{\"type\":\"@Class\",\"fixedId\":true,\"id\":\"\","
         "\"name\":\"_GrowableList\","
         "\"_vmName\":\"\"},"
+        "\"identityHashCode\":0,"
         "\"kind\":\"List\","
         "\"id\":\"\",\"length\":0}",
         buffer);
@@ -4576,6 +4583,7 @@
         "\"_vmType\":\"LinkedHashMap\","
         "\"class\":{\"type\":\"@Class\",\"fixedId\":true,\"id\":\"\","
         "\"name\":\"_InternalLinkedHashMap\",\"_vmName\":\"\"},"
+        "\"identityHashCode\":0,"
         "\"kind\":\"Map\","
         "\"id\":\"\","
         "\"length\":0}",
@@ -4589,11 +4597,15 @@
     ElideJSONSubstring("classes", js.ToCString(), buffer);
     ElideJSONSubstring("objects", buffer, buffer);
     ElideJSONSubstring("_UserTag@", buffer, buffer);
-    EXPECT_STREQ(
+    EXPECT_SUBSTRING(
         "{\"type\":\"@Instance\","
         "\"_vmType\":\"UserTag\","
         "\"class\":{\"type\":\"@Class\",\"fixedId\":true,\"id\":\"\","
         "\"name\":\"_UserTag\",\"_vmName\":\"\"},"
+        // Handle non-zero identity hash.
+        "\"identityHashCode\":",
+        buffer);
+    EXPECT_SUBSTRING(
         "\"kind\":\"PlainInstance\","
         "\"id\":\"\"}",
         buffer);
@@ -4608,11 +4620,15 @@
     ElideJSONSubstring("classes", js.ToCString(), buffer);
     ElideJSONSubstring("objects", buffer, buffer);
     ElideJSONSubstring("_Type@", buffer, buffer);
-    EXPECT_STREQ(
+    EXPECT_SUBSTRING(
         "{\"type\":\"@Instance\","
         "\"_vmType\":\"Type\","
         "\"class\":{\"type\":\"@Class\",\"fixedId\":true,\"id\":\"\","
         "\"name\":\"_Type\",\"_vmName\":\"\"},"
+        // Handle non-zero identity hash.
+        "\"identityHashCode\":",
+        buffer);
+    EXPECT_SUBSTRING(
         "\"kind\":\"Type\","
         "\"fixedId\":true,\"id\":\"\","
         "\"typeClass\":{\"type\":\"@Class\",\"fixedId\":true,\"id\":\"\","
diff --git a/runtime/vm/runtime_entry.cc b/runtime/vm/runtime_entry.cc
index d82c602..604900f 100644
--- a/runtime/vm/runtime_entry.cc
+++ b/runtime/vm/runtime_entry.cc
@@ -616,8 +616,7 @@
   }
   const Function& function =
       Function::Handle(caller_frame->LookupDartFunction());
-  if (function.IsInvokeFieldDispatcher() ||
-      function.IsNoSuchMethodDispatcher()) {
+  if (function.HasSavedArgumentsDescriptor()) {
     const auto& args_desc_array = Array::Handle(function.saved_args_desc());
     const ArgumentsDescriptor args_desc(args_desc_array);
     OS::PrintErr(" -> Function %s [%s]\n", function.ToFullyQualifiedCString(),
@@ -3440,6 +3439,18 @@
     true /* is_float */,
     reinterpret_cast<RuntimeFunction>(static_cast<UnaryMathCFunction>(&atan)));
 
+DEFINE_RAW_LEAF_RUNTIME_ENTRY(
+    LibcExp,
+    1,
+    true /* is_float */,
+    reinterpret_cast<RuntimeFunction>(static_cast<UnaryMathCFunction>(&exp)));
+
+DEFINE_RAW_LEAF_RUNTIME_ENTRY(
+    LibcLog,
+    1,
+    true /* is_float */,
+    reinterpret_cast<RuntimeFunction>(static_cast<UnaryMathCFunction>(&log)));
+
 extern "C" void DFLRT_EnterSafepoint(NativeArguments __unusable_) {
   CHECK_STACK_ALIGNMENT;
   TRACE_RUNTIME_CALL("%s", "EnterSafepoint");
diff --git a/runtime/vm/runtime_entry_list.h b/runtime/vm/runtime_entry_list.h
index 4777dd0..ca32756 100644
--- a/runtime/vm/runtime_entry_list.h
+++ b/runtime/vm/runtime_entry_list.h
@@ -81,6 +81,8 @@
   V(double, LibcAsin, double)                                                  \
   V(double, LibcAtan, double)                                                  \
   V(double, LibcAtan2, double, double)                                         \
+  V(double, LibcExp, double)                                                   \
+  V(double, LibcLog, double)                                                   \
   V(uword /*BoolPtr*/, CaseInsensitiveCompareUCS2, uword /*StringPtr*/,        \
     uword /*SmiPtr*/, uword /*SmiPtr*/, uword /*SmiPtr*/)                      \
   V(uword /*BoolPtr*/, CaseInsensitiveCompareUTF16, uword /*StringPtr*/,       \
diff --git a/runtime/vm/scopes.cc b/runtime/vm/scopes.cc
index 3b08708..c643b46 100644
--- a/runtime/vm/scopes.cc
+++ b/runtime/vm/scopes.cc
@@ -362,7 +362,7 @@
   const ContextScope& context_scope =
       ContextScope::Handle(func.context_scope());
   if (!context_scope.IsNull()) {
-    ASSERT(func.IsLocalFunction());
+    ASSERT(func.HasParent());
     for (int i = 0; i < context_scope.num_variables(); i++) {
       String& name = String::Handle(context_scope.NameAt(i));
       UntaggedLocalVarDescriptors::VarInfoKind kind;
diff --git a/runtime/vm/service.h b/runtime/vm/service.h
index 00a3f32..032fafd 100644
--- a/runtime/vm/service.h
+++ b/runtime/vm/service.h
@@ -15,7 +15,7 @@
 namespace dart {
 
 #define SERVICE_PROTOCOL_MAJOR_VERSION 3
-#define SERVICE_PROTOCOL_MINOR_VERSION 43
+#define SERVICE_PROTOCOL_MINOR_VERSION 44
 
 class Array;
 class EmbedderServiceHandler;
diff --git a/runtime/vm/service/service.md b/runtime/vm/service/service.md
index e6df0a6..0da5169 100644
--- a/runtime/vm/service/service.md
+++ b/runtime/vm/service/service.md
@@ -1,8 +1,8 @@
-# Dart VM Service Protocol 3.43
+# Dart VM Service Protocol 3.44
 
 > Please post feedback to the [observatory-discuss group][discuss-list]
 
-This document describes of _version 3.43_ of the Dart VM Service Protocol. This
+This document describes of _version 3.44_ of the Dart VM Service Protocol. This
 protocol is used to communicate with a running Dart Virtual Machine.
 
 To use the Service Protocol, start the VM with the *--observe* flag.
@@ -2409,6 +2409,11 @@
   // What kind of instance is this?
   InstanceKind kind;
 
+  // The identityHashCode assigned to the allocated object. This hash
+  // code is the same as the hash code provided in HeapSnapshot and
+  // CpuSample's returned by getAllocationTraces().
+  int identityHashCode;
+
   // Instance references always include their class.
   @Class class;
 
@@ -2521,6 +2526,11 @@
   // What kind of instance is this?
   InstanceKind kind;
 
+  // The identityHashCode assigned to the allocated object. This hash
+  // code is the same as the hash code provided in HeapSnapshot and
+  // CpuSample's returned by getAllocationTraces().
+  int identityHashCode;
+
   // Instance references always include their class.
   @Class class;
 
@@ -3997,5 +4007,6 @@
 3.41 | Added `PortList` object, `ReceivePort` `InstanceKind`, and `getPorts` RPC.
 3.42 | Added `limit` optional parameter to `getStack` RPC.
 3.43 | Updated heap snapshot format to include identity hash codes. Added `getAllocationTraces` and `setTraceClassAllocation` RPCs, updated `CpuSample` to include `identityHashCode` and `classId` properties, updated `Class` to include `traceAllocations` property.
+3.44 | Added `identityHashCode` property to `@Instance` and `Instance`.
 
 [discuss-list]: https://groups.google.com/a/dartlang.org/forum/#!forum/observatory-discuss
diff --git a/runtime/vm/stack_trace.cc b/runtime/vm/stack_trace.cc
index f200269..74fa21a 100644
--- a/runtime/vm/stack_trace.cc
+++ b/runtime/vm/stack_trace.cc
@@ -238,7 +238,7 @@
     return GetCallerInFutureImpl(future_);
   }
 
-  if (receiver_function_.IsLocalFunction()) {
+  if (receiver_function_.HasParent()) {
     parent_function_ = receiver_function_.parent_function();
     if (parent_function_.recognized_kind() ==
         MethodRecognizer::kFutureTimeout) {
diff --git a/sdk/lib/_internal/vm/lib/math_patch.dart b/sdk/lib/_internal/vm/lib/math_patch.dart
index 0e384ca..167f3f5 100644
--- a/sdk/lib/_internal/vm/lib/math_patch.dart
+++ b/sdk/lib/_internal/vm/lib/math_patch.dart
@@ -161,10 +161,14 @@
 @pragma("vm:never-inline")
 double sqrt(num x) => _sqrt(x.toDouble());
 @patch
-@pragma("vm:prefer-inline")
+@pragma("vm:recognized", "graph-intrinsic")
+@pragma("vm:exact-result-type", "dart:core#_Double")
+@pragma("vm:never-inline")
 double exp(num x) => _exp(x.toDouble());
 @patch
-@pragma("vm:prefer-inline")
+@pragma("vm:recognized", "graph-intrinsic")
+@pragma("vm:exact-result-type", "dart:core#_Double")
+@pragma("vm:never-inline")
 double log(num x) => _log(x.toDouble());
 
 double _atan2(double a, double b) native "Math_atan2";
diff --git a/tests/language/const_functions/const_functions_do_statements_error_test.dart b/tests/language/const_functions/const_functions_do_statements_error_test.dart
new file mode 100644
index 0000000..f48bab3
--- /dev/null
+++ b/tests/language/const_functions/const_functions_do_statements_error_test.dart
@@ -0,0 +1,35 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Tests erroneous do-while statements for const functions.
+
+// SharedOptions=--enable-experiment=const-functions
+
+import "package:expect/expect.dart";
+
+const var1 = fn();
+//           ^^^^
+// [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
+int fn() {
+  int x = 0;
+  do {
+    x++;
+  } while (x);
+  //       ^
+  // [analyzer] COMPILE_TIME_ERROR.NON_BOOL_CONDITION
+  // [cfe] A value of type 'int' can't be assigned to a variable of type 'bool'.
+  return 2;
+}
+
+const var2 = fn2();
+//           ^^^^^
+// [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
+// [cfe] Constant evaluation error:
+int fn2() {
+  int x = 0;
+  do {
+    x++;
+  } while (x as dynamic);
+  return 2;
+}
diff --git a/tests/language/const_functions/const_functions_do_statements_test.dart b/tests/language/const_functions/const_functions_do_statements_test.dart
new file mode 100644
index 0000000..1ca0c2b
--- /dev/null
+++ b/tests/language/const_functions/const_functions_do_statements_test.dart
@@ -0,0 +1,56 @@
+// Copyright (c) 2021, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Tests do-while statements for const functions.
+
+// SharedOptions=--enable-experiment=const-functions
+
+import "package:expect/expect.dart";
+
+const var1 = fn();
+//           ^^^^
+// [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
+int fn() {
+  int x = 0;
+  do {
+    x++;
+  } while (x < 2);
+  return x;
+}
+
+const var2 = fn2(2);
+//           ^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
+const var3 = fn2(10);
+//           ^^^^^^^
+// [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
+int fn2(int a) {
+  int x = 0, b = 0;
+  do {
+    if (x > 5) break;
+    x += a;
+    b++;
+  } while (b < 2);
+  return x;
+}
+
+const var4 = fn3();
+//           ^^^^^
+// [analyzer] COMPILE_TIME_ERROR.CONST_INITIALIZED_WITH_NON_CONSTANT_VALUE
+int fn3() {
+  int x = 0, b = 0;
+  do {
+    x += 1;
+    if (x % 2 == 1) continue;
+    b += x;
+  } while (x < 5);
+  return b;
+}
+
+void main() {
+  Expect.equals(var1, 2);
+  Expect.equals(var2, 4);
+  Expect.equals(var3, 10);
+  Expect.equals(var4, 6);
+}
diff --git a/tools/VERSION b/tools/VERSION
index 34ef5ef..57ef5d9 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 13
 PATCH 0
-PRERELEASE 161
+PRERELEASE 162
 PRERELEASE_PATCH 0
\ No newline at end of file