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