Version 2.17.0-0.0.dev
Merge commit 'f362e1e3501dcc24733b8bc829458b2ca0afc5ba' into 'dev'
diff --git a/.dart_tool/package_config.json b/.dart_tool/package_config.json
index 8839a05..e059e45 100644
--- a/.dart_tool/package_config.json
+++ b/.dart_tool/package_config.json
@@ -259,6 +259,12 @@
"languageVersion": "2.13"
},
{
+ "name": "dds_service_extensions",
+ "rootUri": "../pkg/dds_service_extensions",
+ "packageUri": "lib/",
+ "languageVersion": "2.13"
+ },
+ {
"name": "dev_compiler",
"rootUri": "../pkg/dev_compiler",
"packageUri": "lib/",
diff --git a/.packages b/.packages
index f5ea5bc..e8855d6 100644
--- a/.packages
+++ b/.packages
@@ -38,6 +38,7 @@
dartdev:pkg/dartdev/lib
dartdoc:third_party/pkg/dartdoc/lib
dds:pkg/dds/lib
+dds_service_extensions:pkg/dds_service_extensions/lib
dev_compiler:pkg/dev_compiler/lib
devtools_server:third_party/devtools/devtools_server/lib
devtools_shared:third_party/devtools/devtools_shared/lib
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 67b4b8f..039502f 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,12 +1,17 @@
-## 2.16.0
+## 2.17.0
### Core libraries
#### `dart:core`
-- **Breaking Change** [#47653](https://github.com/dart-lang/sdk/issues/47653):
- On Windows, `Directory.rename` will no longer delete a directory if
- `newPath` specifies one. Instead, a `FileSystemException` will be thrown.
+- Add `Finalizer` and `WeakReference` which can potentially detect when
+ objects are "garbage collected".
+
+## 2.16.0
+
+### Core libraries
+
+#### `dart:core`
- Add `Error.throwWithStackTrace` which can `throw` an
error with an existing stack trace, instead of creating
@@ -19,6 +24,10 @@
#### `dart:io`
+- **Breaking Change** [#47653](https://github.com/dart-lang/sdk/issues/47653):
+On Windows, `Directory.rename` will no longer delete a directory if
+`newPath` specifies one. Instead, a `FileSystemException` will be thrown.
+
- **Breaking Change** [#47769](https://github.com/dart-lang/sdk/issues/47769):
The `Platform.packageRoot` API has been removed. It had been marked deprecated
in 2018, as it doesn't work with any Dart 2.x release.
diff --git a/DEPS b/DEPS
index e0dda5f..3497c49 100644
--- a/DEPS
+++ b/DEPS
@@ -59,6 +59,8 @@
# Checkout extra javascript engines for testing or benchmarking.
# d8, the V8 shell, is always checked out.
"checkout_javascript_engines": False,
+ "d8_tag": "version:9.9.3",
+ "jsshell_tag": "version:95.0",
# As Flutter does, we use Fuchsia's GN and Clang toolchain. These revision
# should be kept up to date with the revisions pulled by the Flutter engine.
@@ -107,9 +109,8 @@
# For more details, see https://github.com/dart-lang/sdk/issues/30164
"dart_style_rev": "08b0294d0a500d5c02168ef57dcb8868d0c3cb48",
- "dartdoc_rev" : "11c4b3c9723bfa7155efcf0fef02329233a6381d",
+ "dartdoc_rev" : "66ee9a81b3bab35adcda18274b7d69567c98c3c6",
"devtools_rev" : "85932bb66aa782c4b2c528be7718960bf256ffb7",
- "jsshell_tag": "version:88.0",
"ffi_rev": "4dd32429880a57b64edaf54c9d5af8a9fa9a4ffb",
"fixnum_rev": "16d3890c6dc82ca629659da1934e412292508bba",
"file_rev": "0e09370f581ab6388d46fda4cdab66638c0171a1",
@@ -213,7 +214,7 @@
Var("dart_root") + "/third_party/d8": {
"packages": [{
"package": "dart/d8",
- "version": "version:9.1.269",
+ "version": Var("d8_tag"),
}],
"dep_type": "cipd",
},
@@ -225,15 +226,6 @@
"condition": "checkout_javascript_engines",
"dep_type": "cipd",
},
- # TODO(b/186078239): remove this copy to the old location
- Var("dart_root") + "/third_party/firefox_jsshell/linux/jsshell": {
- "packages": [{
- "package": "dart/third_party/jsshell/linux-amd64",
- "version": Var("jsshell_tag"),
- }],
- "condition": "checkout_javascript_engines",
- "dep_type": "cipd",
- },
Var("dart_root") + "/third_party/devtools": {
"packages": [{
"package": "dart/third_party/flutter/devtools",
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/api/code.dart b/pkg/_fe_analyzer_shared/lib/src/macros/api/code.dart
index 89f169f..1486d1c 100644
--- a/pkg/_fe_analyzer_shared/lib/src/macros/api/code.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/api/code.dart
@@ -7,10 +7,14 @@
/// The base class representing an arbitrary chunk of Dart code, which may or
/// may not be syntactically or semantically valid yet.
class Code {
- /// All the chunks of [Code] or raw [String]s that comprise this [Code]
- /// object.
+ /// All the chunks of [Code], raw [String]s, or [TypeAnnotation]s that
+ /// comprise this [Code] object.
final List<Object> parts;
+ /// Can be used to more efficiently detect the kind of code, avoiding is
+ /// checks and enabling switch statements.
+ CodeKind get kind => CodeKind.raw;
+
Code.fromString(String code) : parts = [code];
Code.fromParts(this.parts);
@@ -18,6 +22,9 @@
/// A piece of code representing a syntactically valid declaration.
class DeclarationCode extends Code {
+ @override
+ CodeKind get kind => CodeKind.declaration;
+
DeclarationCode.fromString(String code) : super.fromString(code);
DeclarationCode.fromParts(List<Object> parts) : super.fromParts(parts);
@@ -27,6 +34,9 @@
///
/// Should not include any trailing commas,
class ElementCode extends Code {
+ @override
+ CodeKind get kind => CodeKind.element;
+
ElementCode.fromString(String code) : super.fromString(code);
ElementCode.fromParts(List<Object> parts) : super.fromParts(parts);
@@ -34,6 +44,9 @@
/// A piece of code representing a syntactically valid expression.
class ExpressionCode extends Code {
+ @override
+ CodeKind get kind => CodeKind.expression;
+
ExpressionCode.fromString(String code) : super.fromString(code);
ExpressionCode.fromParts(List<Object> parts) : super.fromParts(parts);
@@ -46,6 +59,9 @@
///
/// Both arrow and block function bodies are allowed.
class FunctionBodyCode extends Code {
+ @override
+ CodeKind get kind => CodeKind.functionBody;
+
FunctionBodyCode.fromString(String code) : super.fromString(code);
FunctionBodyCode.fromParts(List<Object> parts) : super.fromParts(parts);
@@ -53,6 +69,9 @@
/// A piece of code representing a syntactically valid identifier.
class IdentifierCode extends Code {
+ @override
+ CodeKind get kind => CodeKind.identifier;
+
IdentifierCode.fromString(String code) : super.fromString(code);
IdentifierCode.fromParts(List<Object> parts) : super.fromParts(parts);
@@ -62,6 +81,9 @@
///
/// This should not include any trailing commas.
class NamedArgumentCode extends Code {
+ @override
+ CodeKind get kind => CodeKind.namedArgument;
+
NamedArgumentCode.fromString(String code) : super.fromString(code);
NamedArgumentCode.fromParts(List<Object> parts) : super.fromParts(parts);
@@ -77,6 +99,9 @@
/// construct and combine these together in a way that creates valid parameter
/// lists.
class ParameterCode extends Code {
+ @override
+ CodeKind get kind => CodeKind.parameter;
+
ParameterCode.fromString(String code) : super.fromString(code);
ParameterCode.fromParts(List<Object> parts) : super.fromParts(parts);
@@ -86,6 +111,9 @@
///
/// Should always end with a semicolon.
class StatementCode extends Code {
+ @override
+ CodeKind get kind => CodeKind.statement;
+
StatementCode.fromString(String code) : super.fromString(code);
StatementCode.fromParts(List<Object> parts) : super.fromParts(parts);
@@ -102,3 +130,15 @@
last,
];
}
+
+enum CodeKind {
+ raw,
+ declaration,
+ element,
+ expression,
+ functionBody,
+ identifier,
+ namedArgument,
+ parameter,
+ statement,
+}
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/api/introspection.dart b/pkg/_fe_analyzer_shared/lib/src/macros/api/introspection.dart
index e892296..318219b 100644
--- a/pkg/_fe_analyzer_shared/lib/src/macros/api/introspection.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/api/introspection.dart
@@ -14,6 +14,10 @@
/// A [Code] object representation of this type annotation.
Code get code;
+
+ /// Allows you to check the kind of a [TypeAnnotation] in a switch statement,
+ /// and without `is` checks.
+ TypeAnnotationKind get kind;
}
/// The base class for function type declarations.
@@ -29,6 +33,9 @@
/// The type parameters for this function.
Iterable<TypeParameterDeclaration> get typeParameters;
+
+ @override
+ TypeAnnotationKind get kind => TypeAnnotationKind.functionType;
}
/// An unresolved reference to a type.
@@ -41,6 +48,9 @@
/// The type arguments, if applicable.
Iterable<TypeAnnotation> get typeArguments;
+
+ @override
+ TypeAnnotationKind get kind => TypeAnnotationKind.namedType;
}
/// The interface representing a resolved type.
@@ -65,9 +75,15 @@
abstract class Declaration {
/// The name of this declaration.
String get name;
+
+ /// Allows you to check the kind of a [Declaration] in a switch statement,
+ /// and without `is` checks.
+ DeclarationKind get kind;
}
/// A declaration that defines a new type in the program.
+///
+/// See subtypes [ClassDeclaration] and [TypeAliasDeclaration].
abstract class TypeDeclaration implements Declaration {
/// The type parameters defined for this type declaration.
Iterable<TypeParameterDeclaration> get typeParameters;
@@ -89,6 +105,9 @@
/// Information about fields, methods, and constructors must be retrieved from
/// the `builder` objects.
abstract class ClassDeclaration implements TypeDeclaration {
+ @override
+ DeclarationKind get kind => DeclarationKind.clazz;
+
/// Whether this class has an `abstract` modifier.
bool get isAbstract;
@@ -108,8 +127,20 @@
Iterable<TypeParameterDeclaration> get typeParameters;
}
+/// Type alias introspection information.
+abstract class TypeAliasDeclaration extends TypeDeclaration {
+ @override
+ DeclarationKind get kind => DeclarationKind.typeAlias;
+
+ /// The type annotation this is an alias for.
+ TypeAnnotation get type;
+}
+
/// Function introspection information.
abstract class FunctionDeclaration implements Declaration {
+ @override
+ DeclarationKind get kind => DeclarationKind.function;
+
/// Whether this function has an `abstract` modifier.
bool get isAbstract;
@@ -137,6 +168,9 @@
/// Method introspection information.
abstract class MethodDeclaration implements FunctionDeclaration {
+ @override
+ DeclarationKind get kind => DeclarationKind.method;
+
/// The class that defines this method.
TypeAnnotation get definingClass;
}
@@ -149,6 +183,9 @@
/// Variable introspection information.
abstract class VariableDeclaration implements Declaration {
+ @override
+ DeclarationKind get kind => DeclarationKind.variable;
+
/// Whether this function has an `abstract` modifier.
bool get isAbstract;
@@ -164,12 +201,18 @@
/// Field introspection information ..
abstract class FieldDeclaration implements VariableDeclaration {
+ @override
+ DeclarationKind get kind => DeclarationKind.field;
+
/// The class that defines this method.
TypeAnnotation get definingClass;
}
/// Parameter introspection information.
abstract class ParameterDeclaration implements Declaration {
+ @override
+ DeclarationKind get kind => DeclarationKind.parameter;
+
/// The type of this parameter.
TypeAnnotation get type;
@@ -187,6 +230,28 @@
/// Type parameter introspection information.
abstract class TypeParameterDeclaration implements Declaration {
+ @override
+ DeclarationKind get kind => DeclarationKind.typeParameter;
+
/// The bounds for this type parameter, if it has any.
TypeAnnotation? get bounds;
}
+
+// The kinds of type declarations.
+enum DeclarationKind {
+ clazz,
+ constructor,
+ field,
+ function,
+ method,
+ parameter,
+ typeAlias,
+ typeParameter,
+ variable,
+}
+
+// The kinds of type annotations.
+enum TypeAnnotationKind {
+ namedType,
+ functionType,
+}
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/bootstrap.dart b/pkg/_fe_analyzer_shared/lib/src/macros/bootstrap.dart
new file mode 100644
index 0000000..55ea8bd
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/bootstrap.dart
@@ -0,0 +1,143 @@
+// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// Generates a Dart program for a given macro, which can be compiled and then
+/// passed as a precompiled kernel file to `MacroExecutor.loadMacro`.
+String bootstrapMacroIsolate(
+ String macroImport, String macroName, List<String> constructorNames) {
+ StringBuffer constructorEntries = new StringBuffer(
+ "MacroClassIdentifierImpl(Uri.parse('$macroImport'), '$macroName'): {");
+ for (String constructor in constructorNames) {
+ constructorEntries.writeln("'$constructor': "
+ "$macroName.${constructor.isEmpty ? 'new' : constructor},");
+ }
+ constructorEntries.writeln('},');
+ return template
+ .replaceFirst(_importMarker, 'import \'$macroImport\';')
+ .replaceFirst(
+ _macroConstructorEntriesMarker, constructorEntries.toString());
+}
+
+const String _importMarker = '{{IMPORT}}';
+const String _macroConstructorEntriesMarker = '{{MACRO_CONSTRUCTOR_ENTRIES}}';
+
+const String template = '''
+import 'dart:async';
+import 'dart:isolate';
+
+import 'package:_fe_analyzer_shared/src/macros/executor_shared/response_impls.dart';
+import 'package:_fe_analyzer_shared/src/macros/executor_shared/serialization.dart';
+import 'package:_fe_analyzer_shared/src/macros/executor_shared/protocol.dart';
+import 'package:_fe_analyzer_shared/src/macros/executor.dart';
+import 'package:_fe_analyzer_shared/src/macros/api.dart';
+
+$_importMarker
+
+/// Entrypoint to be spawned with [Isolate.spawnUri].
+///
+/// Supports the client side of the macro expansion protocol.
+void main(_, SendPort sendPort) {
+ withSerializationMode(SerializationMode.client, () {
+ ReceivePort receivePort = new ReceivePort();
+ sendPort.send(receivePort.sendPort);
+ receivePort.listen((message) async {
+ var deserializer = JsonDeserializer(message as Iterable<Object?>)
+ ..moveNext();
+ var type = MessageType.values[deserializer.expectNum()];
+ var serializer = JsonSerializer();
+ switch (type) {
+ case MessageType.instantiateMacroRequest:
+ var request = InstantiateMacroRequest.deserialize(deserializer);
+ (await _instantiateMacro(request)).serialize(serializer);
+ break;
+ case MessageType.executeDefinitionsPhaseRequest:
+ var request = ExecuteDefinitionsPhaseRequest.deserialize(
+ deserializer,
+ ClientTypeResolver(),
+ ClientClassIntrospector(),
+ ClientTypeDeclarationsResolver());
+ (await _executeDefinitionsPhase(request)).serialize(serializer);
+ break;
+ default:
+ throw new StateError('Unhandled event type \$type');
+ }
+ sendPort.send(serializer.result);
+ });
+ });
+}
+
+/// Maps macro identifiers to constructors.
+final _macroConstructors = <MacroClassIdentifierImpl, Map<String, Macro Function()>>{
+ $_macroConstructorEntriesMarker
+};
+
+/// Maps macro instance identifiers to instances.
+final _macroInstances = <MacroInstanceIdentifierImpl, Macro>{};
+
+/// Handles [InstantiateMacroRequest]s.
+Future<SerializableResponse> _instantiateMacro(
+ InstantiateMacroRequest request) async {
+ try {
+ var constructors = _macroConstructors[request.macroClass];
+ if (constructors == null) {
+ throw new ArgumentError('Unrecognized macro class \${request.macroClass}');
+ }
+ var constructor = constructors[request.constructorName];
+ if (constructor == null) {
+ throw new ArgumentError(
+ 'Unrecognized constructor name "\${request.constructorName}" for '
+ 'macro class "\${request.macroClass}".');
+ }
+
+ var instance = Function.apply(constructor, request.arguments.positional, {
+ for (MapEntry<String, Object?> entry in request.arguments.named.entries)
+ new Symbol(entry.key): entry.value,
+ }) as Macro;
+ var identifier = new MacroInstanceIdentifierImpl();
+ _macroInstances[identifier] = instance;
+ return new SerializableResponse(
+ responseType: MessageType.macroInstanceIdentifier,
+ response: identifier,
+ requestId: request.id);
+ } catch (e) {
+ return new SerializableResponse(
+ responseType: MessageType.error,
+ error: e.toString(),
+ requestId: request.id);
+ }
+}
+
+Future<SerializableResponse> _executeDefinitionsPhase(
+ ExecuteDefinitionsPhaseRequest request) async {
+ try {
+ Macro? instance = _macroInstances[request.macro];
+ if (instance == null) {
+ throw new StateError('Unrecognized macro instance \${request.macro}\\n'
+ 'Known instances: \$_macroInstances)');
+ }
+ Declaration declaration = request.declaration;
+ if (instance is FunctionDefinitionMacro &&
+ declaration is FunctionDeclaration) {
+ FunctionDefinitionBuilderImpl builder = new FunctionDefinitionBuilderImpl(
+ declaration,
+ request.typeResolver,
+ request.typeDeclarationResolver,
+ request.classIntrospector);
+ await instance.buildDefinitionForFunction(declaration, builder);
+ return new SerializableResponse(
+ responseType: MessageType.macroExecutionResult,
+ response: builder.result,
+ requestId: request.id);
+ } else {
+ throw new UnsupportedError(
+ ('Only FunctionDefinitionMacros are supported currently'));
+ }
+ } catch (e) {
+ return new SerializableResponse(
+ responseType: MessageType.error,
+ error: e.toString(),
+ requestId: request.id);
+ }
+}
+''';
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/executor.dart b/pkg/_fe_analyzer_shared/lib/src/macros/executor.dart
index d4d248d..38a9f4b 100644
--- a/pkg/_fe_analyzer_shared/lib/src/macros/executor.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/executor.dart
@@ -3,13 +3,17 @@
// BSD-style license that can be found in the LICENSE file.
import 'api.dart';
+import 'bootstrap.dart'; // For doc comments only.
+import 'executor_shared/serialization.dart';
/// Exposes a platform specific [MacroExecutor], through a top level
/// `Future<MacroExecutor> start()` function.
///
/// TODO: conditionally load isolate_mirrors_executor.dart once conditional
/// imports of mirrors are supported in AOT (issue #48057).
-import 'fake_executor/fake_executor.dart' as executor_impl show start;
+import 'fake_executor/fake_executor.dart'
+ if (dart.library.isolate) 'isolated_executor/isolated_executor.dart'
+ as executor_impl show start;
/// The interface used by Dart language implementations, in order to load
/// and execute macros, as well as produce library augmentations from those
@@ -22,6 +26,9 @@
/// Returns a platform specific [MacroExecutor]. On unsupported platforms this
/// will be a fake executor object, which will throw an [UnsupportedError] if
/// used.
+ ///
+ /// Note that some implementations will also require calls to [loadMacro]
+ /// to pass a `precompiledKernelUri`.
static Future<MacroExecutor> start() => executor_impl.start();
/// Invoked when an implementation discovers a new macro definition in a
@@ -32,8 +39,17 @@
/// [MacroInstanceIdentifier]s given for this macro will be invalid after
/// that point and should be discarded.
///
+ /// The [precompiledKernelUri] if passed must point to a kernel program for
+ /// the given macro. A bootstrap Dart program can be generated with the
+ /// [bootstrapMacroIsolate] function, and the result should be compiled to
+ /// kernel and passed here.
+ ///
+ /// Some implementations may require [precompiledKernelUri] to be passed, and
+ /// will throw an [UnsupportedError] if it is not.
+ ///
/// Throws an exception if the macro fails to load.
- Future<MacroClassIdentifier> loadMacro(Uri library, String name);
+ Future<MacroClassIdentifier> loadMacro(Uri library, String name,
+ {Uri? precompiledKernelUri});
/// Creates an instance of [macroClass] in the executor, and returns an
/// identifier for that instance.
@@ -81,31 +97,143 @@
///
/// All argument instances must be of type [Code] or a built-in value type that
/// is serializable (num, bool, String, null, etc).
-class Arguments {
+class Arguments implements Serializable {
final List<Object?> positional;
final Map<String, Object?> named;
Arguments(this.positional, this.named);
+
+ factory Arguments.deserialize(Deserializer deserializer) {
+ deserializer
+ ..moveNext()
+ ..expectList();
+ List<Object?> positionalArgs = [
+ for (bool hasNext = deserializer.moveNext();
+ hasNext;
+ hasNext = deserializer.moveNext())
+ _deserializeArg(deserializer, alreadyMoved: true),
+ ];
+ deserializer
+ ..moveNext()
+ ..expectList();
+ Map<String, Object?> namedArgs = {
+ for (bool hasNext = deserializer.moveNext();
+ hasNext;
+ hasNext = deserializer.moveNext())
+ deserializer.expectString(): _deserializeArg(deserializer),
+ };
+ return new Arguments(positionalArgs, namedArgs);
+ }
+
+ static Object? _deserializeArg(Deserializer deserializer,
+ {bool alreadyMoved = false}) {
+ if (!alreadyMoved) deserializer.moveNext();
+ _ArgumentKind kind = _ArgumentKind.values[deserializer.expectNum()];
+ switch (kind) {
+ case _ArgumentKind.nil:
+ return null;
+ case _ArgumentKind.string:
+ deserializer.moveNext();
+ return deserializer.expectString();
+ case _ArgumentKind.bool:
+ deserializer.moveNext();
+ return deserializer.expectBool();
+ case _ArgumentKind.num:
+ deserializer.moveNext();
+ return deserializer.expectNum();
+ case _ArgumentKind.list:
+ deserializer.moveNext();
+ deserializer.expectList();
+ return [
+ for (bool hasNext = deserializer.moveNext();
+ hasNext;
+ hasNext = deserializer.moveNext())
+ _deserializeArg(deserializer, alreadyMoved: true),
+ ];
+ case _ArgumentKind.map:
+ deserializer.moveNext();
+ deserializer.expectList();
+ return {
+ for (bool hasNext = deserializer.moveNext();
+ hasNext;
+ hasNext = deserializer.moveNext())
+ _deserializeArg(deserializer, alreadyMoved: true):
+ _deserializeArg(deserializer),
+ };
+ }
+ }
+
+ void serialize(Serializer serializer) {
+ serializer.startList();
+ for (Object? arg in positional) {
+ _serializeArg(arg, serializer);
+ }
+ serializer.endList();
+
+ serializer.startList();
+ for (MapEntry<String, Object?> arg in named.entries) {
+ serializer.addString(arg.key);
+ _serializeArg(arg.value, serializer);
+ }
+ serializer.endList();
+ }
+
+ static void _serializeArg(Object? arg, Serializer serializer) {
+ if (arg == null) {
+ serializer.addNum(_ArgumentKind.nil.index);
+ } else if (arg is String) {
+ serializer
+ ..addNum(_ArgumentKind.string.index)
+ ..addString(arg);
+ } else if (arg is num) {
+ serializer
+ ..addNum(_ArgumentKind.num.index)
+ ..addNum(arg);
+ } else if (arg is bool) {
+ serializer
+ ..addNum(_ArgumentKind.bool.index)
+ ..addBool(arg);
+ } else if (arg is List) {
+ serializer
+ ..addNum(_ArgumentKind.list.index)
+ ..startList();
+ for (Object? item in arg) {
+ _serializeArg(item, serializer);
+ }
+ serializer.endList();
+ } else if (arg is Map) {
+ serializer
+ ..addNum(_ArgumentKind.map.index)
+ ..startList();
+ for (MapEntry<Object?, Object?> entry in arg.entries) {
+ _serializeArg(entry.key, serializer);
+ _serializeArg(entry.value, serializer);
+ }
+ serializer.endList();
+ } else {
+ throw new UnsupportedError('Unsupported argument type $arg');
+ }
+ }
}
/// An opaque identifier for a macro class, retrieved by
/// [MacroExecutor.loadMacro].
///
/// Used to execute or reload this macro in the future.
-abstract class MacroClassIdentifier {}
+abstract class MacroClassIdentifier implements Serializable {}
/// An opaque identifier for an instance of a macro class, retrieved by
/// [MacroExecutor.instantiateMacro].
///
/// Used to execute or reload this macro in the future.
-abstract class MacroInstanceIdentifier {}
+abstract class MacroInstanceIdentifier implements Serializable {}
/// A summary of the results of running a macro in a given phase.
///
/// All modifications are expressed in terms of library augmentation
/// declarations.
-abstract class MacroExecutionResult {
+abstract class MacroExecutionResult implements Serializable {
/// Any library imports that should be added to support the code used in
/// the augmentations.
Iterable<DeclarationCode> get imports;
@@ -125,3 +253,6 @@
/// This phase allows augmenting existing declarations.
definitions,
}
+
+/// Used for serializing and deserializing arguments.
+enum _ArgumentKind { string, bool, num, list, map, nil }
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/executor_shared/introspection_impls.dart b/pkg/_fe_analyzer_shared/lib/src/macros/executor_shared/introspection_impls.dart
new file mode 100644
index 0000000..e237127
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/executor_shared/introspection_impls.dart
@@ -0,0 +1,181 @@
+// 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.
+
+import '../api.dart';
+
+abstract class TypeAnnotationImpl implements TypeAnnotation {
+ final bool isNullable;
+
+ TypeAnnotationImpl({required this.isNullable});
+}
+
+class NamedTypeAnnotationImpl extends TypeAnnotationImpl
+ implements NamedTypeAnnotation {
+ @override
+ Code get code => new Code.fromParts([
+ name,
+ if (typeArguments.isNotEmpty) ...[
+ '<',
+ for (TypeAnnotation arg in typeArguments) ...[arg, ','],
+ '>',
+ ],
+ if (isNullable) '?',
+ ]);
+
+ @override
+ final String name;
+
+ @override
+ final List<TypeAnnotation> typeArguments;
+
+ @override
+ TypeAnnotationKind get kind => TypeAnnotationKind.namedType;
+
+ NamedTypeAnnotationImpl({
+ required bool isNullable,
+ required this.name,
+ required this.typeArguments,
+ }) : super(isNullable: isNullable);
+}
+
+class FunctionTypeAnnotationImpl extends TypeAnnotationImpl
+ implements FunctionTypeAnnotation {
+ @override
+ Code get code => new Code.fromParts([
+ returnType,
+ 'Function',
+ if (typeParameters.isNotEmpty) ...[
+ '<',
+ for (TypeParameterDeclaration arg in typeParameters) ...[
+ arg.name,
+ if (arg.bounds != null) ...[' extends ', arg.bounds!],
+ ','
+ ],
+ '>',
+ ],
+ '(',
+ for (ParameterDeclaration positional in positionalParameters) ...[
+ positional.type,
+ ' ${positional.name}',
+ ],
+ if (namedParameters.isNotEmpty) ...[
+ '{',
+ for (ParameterDeclaration named in namedParameters) ...[
+ named.type,
+ ' ${named.name}',
+ ],
+ '}',
+ ],
+ ')',
+ if (isNullable) '?',
+ ]);
+
+ @override
+ final List<ParameterDeclaration> namedParameters;
+
+ @override
+ final List<ParameterDeclaration> positionalParameters;
+
+ @override
+ final TypeAnnotation returnType;
+
+ @override
+ final List<TypeParameterDeclaration> typeParameters;
+
+ @override
+ TypeAnnotationKind get kind => TypeAnnotationKind.functionType;
+
+ FunctionTypeAnnotationImpl({
+ required bool isNullable,
+ required this.namedParameters,
+ required this.positionalParameters,
+ required this.returnType,
+ required this.typeParameters,
+ }) : super(isNullable: isNullable);
+}
+
+class ParameterDeclarationImpl implements ParameterDeclaration {
+ @override
+ final String name;
+
+ @override
+ final Code? defaultValue;
+
+ @override
+ final bool isNamed;
+
+ @override
+ final bool isRequired;
+
+ @override
+ final TypeAnnotation type;
+
+ @override
+ DeclarationKind get kind => DeclarationKind.parameter;
+
+ ParameterDeclarationImpl({
+ required this.name,
+ required this.defaultValue,
+ required this.isNamed,
+ required this.isRequired,
+ required this.type,
+ });
+}
+
+class TypeParameterDeclarationImpl implements TypeParameterDeclaration {
+ @override
+ final String name;
+
+ @override
+ final TypeAnnotation? bounds;
+
+ @override
+ DeclarationKind get kind => DeclarationKind.typeParameter;
+
+ TypeParameterDeclarationImpl({required this.name, required this.bounds});
+}
+
+class FunctionDeclarationImpl implements FunctionDeclaration {
+ @override
+ final String name;
+
+ @override
+ final bool isAbstract;
+
+ @override
+ final bool isExternal;
+
+ @override
+ final bool isGetter;
+
+ @override
+ final bool isSetter;
+
+ @override
+ final List<ParameterDeclaration> namedParameters;
+
+ @override
+ final List<ParameterDeclaration> positionalParameters;
+
+ @override
+ final TypeAnnotation returnType;
+
+ @override
+ final List<TypeParameterDeclaration> typeParameters;
+
+ @override
+ DeclarationKind get kind => DeclarationKind.function;
+
+ FunctionDeclarationImpl({
+ required this.name,
+ required this.isAbstract,
+ required this.isExternal,
+ required this.isGetter,
+ required this.isSetter,
+ required this.namedParameters,
+ required this.positionalParameters,
+ required this.returnType,
+ required this.typeParameters,
+ });
+}
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/executor_shared/protocol.dart b/pkg/_fe_analyzer_shared/lib/src/macros/executor_shared/protocol.dart
new file mode 100644
index 0000000..3dcc455
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/executor_shared/protocol.dart
@@ -0,0 +1,263 @@
+// 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.
+
+/// Defines the objects used for communication between the macro executor and
+/// the isolate or process doing the work of macro loading and execution.
+library _fe_analyzer_shared.src.macros.executor_shared.protocol;
+
+import '../executor.dart';
+import '../api.dart';
+import '../executor_shared/response_impls.dart';
+import 'serialization.dart';
+import 'serialization_extensions.dart';
+
+/// Base class all requests extend, provides a unique id for each request.
+abstract class Request implements Serializable {
+ final int id;
+
+ Request({int? id}) : this.id = id ?? _next++;
+
+ Request.deserialize(Deserializer deserializer)
+ : id = (deserializer..moveNext()).expectNum();
+
+ void serialize(Serializer serializer) => serializer.addNum(id);
+
+ static int _next = 0;
+}
+
+/// A generic response object that contains either a response or an error, and
+/// a unique ID.
+class Response {
+ final Object? response;
+ final Object? error;
+ final int requestId;
+
+ Response({this.response, this.error, required this.requestId})
+ : assert(response != null || error != null),
+ assert(response == null || error == null);
+}
+
+/// A serializable [Response], contains the message type as an enum.
+class SerializableResponse implements Response, Serializable {
+ final Serializable? response;
+ final MessageType responseType;
+ final String? error;
+ final int requestId;
+
+ SerializableResponse({
+ this.error,
+ required this.requestId,
+ this.response,
+ required this.responseType,
+ }) : assert(response != null || error != null),
+ assert(response == null || error == null);
+
+ factory SerializableResponse.deserialize(Deserializer deserializer) {
+ deserializer.moveNext();
+ MessageType responseType = MessageType.values[deserializer.expectNum()];
+ Serializable? response;
+ String? error;
+ switch (responseType) {
+ case MessageType.error:
+ deserializer.moveNext();
+ error = deserializer.expectString();
+ break;
+ case MessageType.macroClassIdentifier:
+ response = new MacroClassIdentifierImpl.deserialize(deserializer);
+ break;
+ case MessageType.macroInstanceIdentifier:
+ response = new MacroInstanceIdentifierImpl.deserialize(deserializer);
+ break;
+ case MessageType.macroExecutionResult:
+ response = new MacroExecutionResultImpl.deserialize(deserializer);
+ break;
+ default:
+ throw new StateError('Unexpected response type $responseType');
+ }
+
+ return new SerializableResponse(
+ responseType: responseType,
+ response: response,
+ error: error,
+ requestId: (deserializer..moveNext()).expectNum());
+ }
+
+ void serialize(Serializer serializer) {
+ serializer.addNum(responseType.index);
+ if (response != null) {
+ response!.serialize(serializer);
+ } else if (error != null) {
+ serializer.addString(error!.toString());
+ }
+ serializer.addNum(requestId);
+ }
+}
+
+/// A request to load a macro in this isolate.
+class LoadMacroRequest extends Request {
+ final Uri library;
+ final String name;
+
+ LoadMacroRequest(this.library, this.name);
+
+ LoadMacroRequest.deserialize(Deserializer deserializer)
+ : library = Uri.parse((deserializer..moveNext()).expectString()),
+ name = (deserializer..moveNext()).expectString(),
+ super.deserialize(deserializer);
+
+ @override
+ void serialize(Serializer serializer) {
+ serializer
+ ..addNum(MessageType.loadMacroRequest.index)
+ ..addString(library.toString())
+ ..addString(name);
+ super.serialize(serializer);
+ }
+}
+
+/// A request to instantiate a macro instance.
+class InstantiateMacroRequest extends Request {
+ final MacroClassIdentifier macroClass;
+ final String constructorName;
+ final Arguments arguments;
+
+ InstantiateMacroRequest(
+ this.macroClass, this.constructorName, this.arguments);
+
+ InstantiateMacroRequest.deserialize(Deserializer deserializer)
+ : macroClass = new MacroClassIdentifierImpl.deserialize(deserializer),
+ constructorName = (deserializer..moveNext()).expectString(),
+ arguments = new Arguments.deserialize(deserializer),
+ super.deserialize(deserializer);
+
+ @override
+ void serialize(Serializer serializer) {
+ serializer.addNum(MessageType.instantiateMacroRequest.index);
+ macroClass.serialize(serializer);
+ serializer.addString(constructorName);
+ arguments.serialize(serializer);
+ super.serialize(serializer);
+ }
+}
+
+/// A request to execute a macro on a particular declaration in the definition
+/// phase.
+class ExecuteDefinitionsPhaseRequest extends Request {
+ final MacroInstanceIdentifier macro;
+ final Declaration declaration;
+
+ /// Client/Server specific implementation, not serialized.
+ final TypeResolver typeResolver;
+
+ /// Client/Server specific implementation, not serialized.
+ final ClassIntrospector classIntrospector;
+
+ /// Client/Server specific implementation, not serialized.
+ final TypeDeclarationResolver typeDeclarationResolver;
+
+ ExecuteDefinitionsPhaseRequest(this.macro, this.declaration,
+ this.typeResolver, this.classIntrospector, this.typeDeclarationResolver);
+
+ /// When deserializing we have already consumed the message type, so we don't
+ /// consume it again.
+ ExecuteDefinitionsPhaseRequest.deserialize(Deserializer deserializer,
+ this.typeResolver, this.classIntrospector, this.typeDeclarationResolver)
+ : macro = new MacroInstanceIdentifierImpl.deserialize(deserializer),
+ declaration = (deserializer..moveNext()).expectDeclaration(),
+ super.deserialize(deserializer);
+
+ void serialize(Serializer serializer) {
+ serializer.addNum(MessageType.executeDefinitionsPhaseRequest.index);
+ macro.serialize(serializer);
+ declaration.serialize(serializer);
+ super.serialize(serializer);
+ }
+}
+
+/// A request to reflect on a type annotation
+class ReflectTypeRequest extends Request {
+ final TypeAnnotation typeAnnotation;
+
+ ReflectTypeRequest(this.typeAnnotation);
+
+ /// When deserializing we have already consumed the message type, so we don't
+ /// consume it again.
+ ReflectTypeRequest.deserialize(Deserializer deserializer)
+ : typeAnnotation = (deserializer..moveNext()).expectTypeAnnotation(),
+ super.deserialize(deserializer);
+
+ void serialize(Serializer serializer) {
+ serializer.addNum(MessageType.reflectTypeRequest.index);
+ typeAnnotation.serialize(serializer);
+ super.serialize(serializer);
+ }
+}
+
+/// TODO: Implement this
+class ClientTypeResolver implements TypeResolver {
+ @override
+ Future<StaticType> resolve(TypeAnnotation typeAnnotation) {
+ // TODO: implement resolve
+ throw new UnimplementedError();
+ }
+}
+
+/// TODO: Implement this
+class ClientClassIntrospector implements ClassIntrospector {
+ @override
+ Future<List<ConstructorDeclaration>> constructorsOf(ClassDeclaration clazz) {
+ // TODO: implement constructorsOf
+ throw new UnimplementedError();
+ }
+
+ @override
+ Future<List<FieldDeclaration>> fieldsOf(ClassDeclaration clazz) {
+ // TODO: implement fieldsOf
+ throw new UnimplementedError();
+ }
+
+ @override
+ Future<List<ClassDeclaration>> interfacesOf(ClassDeclaration clazz) {
+ // TODO: implement interfacesOf
+ throw new UnimplementedError();
+ }
+
+ @override
+ Future<List<MethodDeclaration>> methodsOf(ClassDeclaration clazz) {
+ // TODO: implement methodsOf
+ throw new UnimplementedError();
+ }
+
+ @override
+ Future<List<ClassDeclaration>> mixinsOf(ClassDeclaration clazz) {
+ // TODO: implement mixinsOf
+ throw new UnimplementedError();
+ }
+
+ @override
+ Future<ClassDeclaration?> superclassOf(ClassDeclaration clazz) {
+ // TODO: implement superclassOf
+ throw new UnimplementedError();
+ }
+}
+
+/// TODO: Implement this
+class ClientTypeDeclarationsResolver implements TypeDeclarationResolver {
+ @override
+ Future<TypeDeclaration> declarationOf(NamedStaticType annotation) {
+ // TODO: implement declarationOf
+ throw new UnimplementedError();
+ }
+}
+
+enum MessageType {
+ error,
+ executeDefinitionsPhaseRequest,
+ instantiateMacroRequest,
+ loadMacroRequest,
+ reflectTypeRequest,
+ macroClassIdentifier,
+ macroInstanceIdentifier,
+ macroExecutionResult,
+}
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/executor_shared/response_impls.dart b/pkg/_fe_analyzer_shared/lib/src/macros/executor_shared/response_impls.dart
new file mode 100644
index 0000000..5155f01
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/executor_shared/response_impls.dart
@@ -0,0 +1,222 @@
+// 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.
+
+import 'dart:async';
+
+import '../executor.dart';
+import '../api.dart';
+import 'serialization.dart';
+import 'serialization_extensions.dart';
+
+/// Implementation of [MacroClassIdentifier].
+class MacroClassIdentifierImpl implements MacroClassIdentifier {
+ final String id;
+
+ MacroClassIdentifierImpl(Uri library, String name) : id = '$library#$name';
+
+ MacroClassIdentifierImpl.deserialize(Deserializer deserializer)
+ : id = (deserializer..moveNext()).expectString();
+
+ void serialize(Serializer serializer) => serializer.addString(id);
+
+ operator ==(other) => other is MacroClassIdentifierImpl && id == other.id;
+
+ int get hashCode => id.hashCode;
+}
+
+/// Implementation of [MacroInstanceIdentifier].
+class MacroInstanceIdentifierImpl implements MacroInstanceIdentifier {
+ static int _next = 0;
+
+ final int id;
+
+ MacroInstanceIdentifierImpl() : id = _next++;
+
+ MacroInstanceIdentifierImpl.deserialize(Deserializer deserializer)
+ : id = (deserializer..moveNext()).expectNum();
+
+ void serialize(Serializer serializer) => serializer.addNum(id);
+
+ operator ==(other) => other is MacroInstanceIdentifierImpl && id == other.id;
+
+ int get hashCode => id;
+}
+
+/// Implementation of [MacroExecutionResult].
+class MacroExecutionResultImpl implements MacroExecutionResult {
+ @override
+ final List<DeclarationCode> augmentations;
+
+ @override
+ final List<DeclarationCode> imports;
+
+ MacroExecutionResultImpl({
+ List<DeclarationCode>? augmentations,
+ List<DeclarationCode>? imports,
+ }) : augmentations = augmentations ?? [],
+ imports = imports ?? [];
+
+ factory MacroExecutionResultImpl.deserialize(Deserializer deserializer) {
+ deserializer.moveNext();
+ deserializer.expectList();
+ List<DeclarationCode> augmentations = [
+ for (bool hasNext = deserializer.moveNext();
+ hasNext;
+ hasNext = deserializer.moveNext())
+ deserializer.expectCode()
+ ];
+ deserializer.moveNext();
+ deserializer.expectList();
+ List<DeclarationCode> imports = [
+ for (bool hasNext = deserializer.moveNext();
+ hasNext;
+ hasNext = deserializer.moveNext())
+ deserializer.expectCode()
+ ];
+
+ return new MacroExecutionResultImpl(
+ augmentations: augmentations,
+ imports: imports,
+ );
+ }
+
+ void serialize(Serializer serializer) {
+ serializer.startList();
+ for (DeclarationCode augmentation in augmentations) {
+ augmentation.serialize(serializer);
+ }
+ serializer.endList();
+ serializer.startList();
+ for (DeclarationCode import in imports) {
+ import.serialize(serializer);
+ }
+ serializer.endList();
+ }
+}
+
+/// Implementation of [FunctionDefinitionBuilder].
+class FunctionDefinitionBuilderImpl implements FunctionDefinitionBuilder {
+ final TypeResolver typeResolver;
+ final TypeDeclarationResolver typeDeclarationResolver;
+ final ClassIntrospector classIntrospector;
+
+ /// The declaration this is a builder for.
+ final FunctionDeclaration declaration;
+
+ /// The final result, will be built up over `augment` calls.
+ final MacroExecutionResultImpl result;
+
+ FunctionDefinitionBuilderImpl(this.declaration, this.typeResolver,
+ this.typeDeclarationResolver, this.classIntrospector)
+ : result = new MacroExecutionResultImpl();
+
+ FunctionDefinitionBuilderImpl.deserialize(Deserializer deserializer,
+ this.typeResolver, this.typeDeclarationResolver, this.classIntrospector)
+ : declaration =
+ (deserializer..moveNext()).expectDeclaration<FunctionDeclaration>(),
+ result = new MacroExecutionResultImpl.deserialize(deserializer);
+
+ void serialize(Serializer serializer) {
+ // Note that the `typeResolver`, `typeDeclarationResolver`, and
+ // `classIntrospector` are not serialized. These have custom implementations
+ // on the client/server side.
+ declaration.serialize(serializer);
+ result.serialize(serializer);
+ }
+
+ @override
+ void augment(FunctionBodyCode body) {
+ result.augmentations.add(new DeclarationCode.fromParts([
+ 'augment ',
+ declaration.returnType.code,
+ ' ',
+ declaration.name,
+ if (declaration.typeParameters.isNotEmpty) ...[
+ '<',
+ for (TypeParameterDeclaration typeParam
+ in declaration.typeParameters) ...[
+ typeParam.name,
+ if (typeParam.bounds != null) ...['extends ', typeParam.bounds!.code],
+ if (typeParam != declaration.typeParameters.last) ', ',
+ ],
+ '>',
+ ],
+ '(',
+ for (ParameterDeclaration positionalRequired
+ in declaration.positionalParameters.where((p) => p.isRequired)) ...[
+ new ParameterCode.fromParts([
+ positionalRequired.type.code,
+ ' ',
+ positionalRequired.name,
+ ]),
+ ', '
+ ],
+ if (declaration.positionalParameters.any((p) => !p.isRequired)) ...[
+ '[',
+ for (ParameterDeclaration positionalOptional in declaration
+ .positionalParameters
+ .where((p) => !p.isRequired)) ...[
+ new ParameterCode.fromParts([
+ positionalOptional.type.code,
+ ' ',
+ positionalOptional.name,
+ ]),
+ ', ',
+ ],
+ ']',
+ ],
+ if (declaration.namedParameters.isNotEmpty) ...[
+ '{',
+ for (ParameterDeclaration named in declaration.namedParameters) ...[
+ new ParameterCode.fromParts([
+ if (named.isRequired) 'required ',
+ named.type.code,
+ ' ',
+ named.name,
+ if (named.defaultValue != null) ...[
+ ' = ',
+ named.defaultValue!,
+ ],
+ ]),
+ ', ',
+ ],
+ '}',
+ ],
+ ') ',
+ body,
+ ]));
+ }
+
+ @override
+ Future<List<ConstructorDeclaration>> constructorsOf(ClassDeclaration clazz) =>
+ classIntrospector.constructorsOf(clazz);
+
+ @override
+ Future<List<FieldDeclaration>> fieldsOf(ClassDeclaration clazz) =>
+ classIntrospector.fieldsOf(clazz);
+
+ @override
+ Future<List<ClassDeclaration>> interfacesOf(ClassDeclaration clazz) =>
+ classIntrospector.interfacesOf(clazz);
+
+ @override
+ Future<List<MethodDeclaration>> methodsOf(ClassDeclaration clazz) =>
+ classIntrospector.methodsOf(clazz);
+
+ @override
+ Future<List<ClassDeclaration>> mixinsOf(ClassDeclaration clazz) =>
+ classIntrospector.mixinsOf(clazz);
+
+ @override
+ Future<TypeDeclaration> declarationOf(NamedStaticType annotation) =>
+ typeDeclarationResolver.declarationOf(annotation);
+
+ @override
+ Future<ClassDeclaration?> superclassOf(ClassDeclaration clazz) =>
+ classIntrospector.superclassOf(clazz);
+
+ @override
+ Future<StaticType> resolve(TypeAnnotation typeAnnotation) =>
+ typeResolver.resolve(typeAnnotation);
+}
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/executor_shared/serialization.dart b/pkg/_fe_analyzer_shared/lib/src/macros/executor_shared/serialization.dart
new file mode 100644
index 0000000..f5f9343
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/executor_shared/serialization.dart
@@ -0,0 +1,229 @@
+// 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.
+
+import 'dart:async';
+
+/// All serialization must be done in a serialization Zone, which tells it
+/// whether we are the client or server.
+T withSerializationMode<T>(SerializationMode mode, T Function() fn) =>
+ runZoned(fn, zoneValues: {#serializationMode: mode});
+
+/// Serializable interface
+abstract class Serializable {
+ /// Serializes this object using [serializer].
+ void serialize(Serializer serializer);
+}
+
+/// A push based object serialization interface.
+abstract class Serializer {
+ /// Serializes a [String].
+ void addString(String value);
+
+ /// Serializes a nullable [String].
+ void addNullableString(String? value);
+
+ /// Serializes a [num].
+ void addNum(num value);
+
+ /// Serializes a nullable [num].
+ void addNullableNum(num? value);
+
+ /// Serializes a [bool].
+ void addBool(bool value);
+
+ /// Serializes a nullable [bool].
+ void addNullableBool(bool? value);
+
+ /// Serializes a `null` literal.
+ void addNull();
+
+ /// Used to signal the start of an arbitrary length list of items.
+ void startList();
+
+ /// Used to signal the end of an arbitrary length list of items.
+ void endList();
+}
+
+/// A pull based object deserialization interface.
+///
+/// You must call [moveNext] before reading any items, and in order to advance
+/// to the next item.
+abstract class Deserializer {
+ /// Checks if the current value is a null, returns `true` if so and `false`
+ /// otherwise.
+ bool checkNull();
+
+ /// Reads the current value as a non-nullable [String].
+ bool expectBool();
+
+ /// Reads the current value as a nullable [bool].
+ bool? expectNullableBool();
+
+ /// Reads the current value as a non-nullable [String].
+ T expectNum<T extends num>();
+
+ /// Reads the current value as a nullable [num].
+ num? expectNullableNum();
+
+ /// Reads the current value as a non-nullable [String].
+ String expectString();
+
+ /// Reads the current value as a nullable [String].
+ String? expectNullableString();
+
+ /// Asserts that the current item is the start of a list.
+ ///
+ /// An example for how to read from a list is as follows:
+ ///
+ /// var json = JsonReader.fromString(source);
+ /// I know it's a list of strings.
+ ///
+ /// ```
+ /// var result = <String>[];
+ /// deserializer.moveNext();
+ /// deserializer.expectList();
+ /// while (json.moveNext()) {
+ /// result.add(json.expectString());
+ /// }
+ /// // Can now read later items, but need to call `moveNext` again to move
+ /// // past the list.
+ /// deserializer.moveNext();
+ /// deserializer.expectBool();
+ /// ```
+ void expectList();
+
+ /// Moves to the next item, returns `false` if there are no more items to
+ /// read.
+ ///
+ /// If inside of a list, this returns `false` when the end of the list is
+ /// reached, and moves back to the parent, but does not advance it, so another
+ /// call to `moveNext` is needed. See example in the [expectList] docs.
+ bool moveNext();
+}
+
+class JsonSerializer implements Serializer {
+ /// The full result.
+ final _result = <Object?>[];
+
+ /// A path to the current list we are modifying.
+ late List<List<Object?>> _path = [_result];
+
+ /// Returns the result as an unmodifiable [Iterable].
+ ///
+ /// Asserts that all [List] entries have not been closed with [endList].
+ Iterable<Object?> get result {
+ assert(_path.length == 1);
+ return _result;
+ }
+
+ @override
+ void addBool(bool value) => _path.last.add(value);
+ @override
+ void addNullableBool(bool? value) => _path.last.add(value);
+
+ @override
+ void addNum(num value) => _path.last.add(value);
+ @override
+ void addNullableNum(num? value) => _path.last.add(value);
+
+ @override
+ void addString(String value) => _path.last.add(value);
+ @override
+ void addNullableString(String? value) => _path.last.add(value);
+
+ @override
+ void addNull() => _path.last.add(null);
+
+ @override
+ void startList() {
+ List<Object?> sublist = [];
+ _path.last.add(sublist);
+ _path.add(sublist);
+ }
+
+ @override
+ void endList() {
+ _path.removeLast();
+ }
+}
+
+class JsonDeserializer implements Deserializer {
+ /// The root source list to read from.
+ final Iterable<Object?> _source;
+
+ /// The path to the current iterator we are reading from.
+ late List<Iterator<Object?>> _path = [];
+
+ /// Whether we have received our first [moveNext] call.
+ bool _initialized = false;
+
+ /// Initialize this deserializer from `_source`.
+ JsonDeserializer(this._source);
+
+ @override
+ bool checkNull() => _expectValue<Object?>() == null;
+
+ @override
+ void expectList() => _path.add(_expectValue<Iterable<Object?>>().iterator);
+
+ @override
+ bool expectBool() => _expectValue();
+ @override
+ bool? expectNullableBool() => _expectValue();
+
+ @override
+ T expectNum<T extends num>() => _expectValue();
+ @override
+ num? expectNullableNum() => _expectValue();
+
+ @override
+ String expectString() => _expectValue();
+ @override
+ String? expectNullableString() => _expectValue();
+
+ /// Reads the current value and casts it to [T].
+ T _expectValue<T>() {
+ if (!_initialized) {
+ throw new StateError(
+ 'You must call `moveNext()` before reading any values.');
+ }
+ return _path.last.current as T;
+ }
+
+ @override
+ bool moveNext() {
+ if (!_initialized) {
+ _path.add(_source.iterator);
+ _initialized = true;
+ }
+
+ // Move the current iterable, if its at the end of its items remove it from
+ // the current path and return false.
+ if (!_path.last.moveNext()) {
+ _path.removeLast();
+ return false;
+ }
+
+ return true;
+ }
+}
+
+/// Must be set using `withSerializationMode` before doing any serialization or
+/// deserialization.
+SerializationMode get serializationMode {
+ SerializationMode? mode =
+ Zone.current[#serializationMode] as SerializationMode?;
+ if (mode == null) {
+ throw new StateError('No SerializationMode set, you must do all '
+ 'serialization inside a call to `withSerializationMode`.');
+ }
+ return mode;
+}
+
+/// Some objects are serialized differently on the client side versus the server
+/// side. This indicates the different modes.
+enum SerializationMode {
+ server,
+ client,
+}
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/executor_shared/serialization_extensions.dart b/pkg/_fe_analyzer_shared/lib/src/macros/executor_shared/serialization_extensions.dart
new file mode 100644
index 0000000..01cb768
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/executor_shared/serialization_extensions.dart
@@ -0,0 +1,416 @@
+import 'package:_fe_analyzer_shared/src/macros/executor_shared/introspection_impls.dart';
+
+import 'serialization.dart';
+import '../api.dart';
+
+extension DeserializerExtensions on Deserializer {
+ TypeAnnotation expectTypeAnnotation() {
+ int id = expectNum();
+ switch (serializationMode) {
+ case SerializationMode.server:
+ return _typeAnnotationsById[id]!;
+ case SerializationMode.client:
+ TypeAnnotation typeAnnotation;
+ moveNext();
+ TypeAnnotationKind type = TypeAnnotationKind.values[expectNum()];
+ moveNext();
+ switch (type) {
+ case TypeAnnotationKind.namedType:
+ typeAnnotation = _expectNamedTypeAnnotation();
+ break;
+ case TypeAnnotationKind.functionType:
+ typeAnnotation = _expectFunctionTypeAnnotation();
+ break;
+ }
+ _typeAnnotationIds[typeAnnotation] = id;
+ return typeAnnotation;
+ }
+ }
+
+ NamedTypeAnnotation _expectNamedTypeAnnotation() {
+ bool isNullable = expectBool();
+ moveNext();
+ String name = expectString();
+ moveNext();
+ expectList();
+ List<TypeAnnotation> typeArguments = [
+ for (bool hasNext = moveNext(); hasNext; hasNext = moveNext())
+ expectTypeAnnotation(),
+ ];
+ return new NamedTypeAnnotationImpl(
+ isNullable: isNullable, name: name, typeArguments: typeArguments);
+ }
+
+ FunctionTypeAnnotation _expectFunctionTypeAnnotation() {
+ bool isNullable = expectBool();
+
+ moveNext();
+ TypeAnnotation returnType = expectTypeAnnotation();
+
+ moveNext();
+ expectList();
+ List<ParameterDeclaration> positionalParameters = [
+ for (bool hasNext = moveNext(); hasNext; hasNext = moveNext())
+ expectDeclaration(),
+ ];
+
+ moveNext();
+ expectList();
+ List<ParameterDeclaration> namedParameters = [
+ for (bool hasNext = moveNext(); hasNext; hasNext = moveNext())
+ expectDeclaration(),
+ ];
+
+ moveNext();
+ expectList();
+ List<TypeParameterDeclaration> typeParameters = [
+ for (bool hasNext = moveNext(); hasNext; hasNext = moveNext())
+ expectDeclaration(),
+ ];
+
+ return new FunctionTypeAnnotationImpl(
+ isNullable: isNullable,
+ returnType: returnType,
+ positionalParameters: positionalParameters,
+ namedParameters: namedParameters,
+ typeParameters: typeParameters);
+ }
+
+ T expectDeclaration<T extends Declaration>() {
+ DeclarationKind kind = DeclarationKind.values[expectNum()];
+ moveNext();
+ switch (kind) {
+ case DeclarationKind.parameter:
+ return _expectParameterDeclaration() as T;
+ case DeclarationKind.typeParameter:
+ return _expectTypeParameterDeclaration() as T;
+ case DeclarationKind.function:
+ return _expectFunctionDeclaration() as T;
+ default:
+ throw new UnimplementedError('Cant deserialize $kind yet');
+ }
+ }
+
+ ParameterDeclaration _expectParameterDeclaration() {
+ String name = expectString();
+ moveNext();
+ Code? defaultValue;
+ if (!checkNull()) {
+ defaultValue = expectCode();
+ }
+ bool isNamed = expectBool();
+ moveNext();
+ bool isRequired = expectBool();
+ moveNext();
+ TypeAnnotation type = expectTypeAnnotation();
+
+ return new ParameterDeclarationImpl(
+ defaultValue: defaultValue,
+ isNamed: isNamed,
+ isRequired: isRequired,
+ name: name,
+ type: type);
+ }
+
+ TypeParameterDeclaration _expectTypeParameterDeclaration() {
+ String name = expectString();
+ moveNext();
+ TypeAnnotation? bounds;
+ if (!checkNull()) {
+ bounds = expectTypeAnnotation();
+ }
+ return new TypeParameterDeclarationImpl(name: name, bounds: bounds);
+ }
+
+ FunctionDeclaration _expectFunctionDeclaration() {
+ String name = expectString();
+ moveNext();
+ bool isAbstract = expectBool();
+ moveNext();
+ bool isExternal = expectBool();
+ moveNext();
+ bool isGetter = expectBool();
+ moveNext();
+ bool isSetter = expectBool();
+
+ moveNext();
+ expectList();
+ List<ParameterDeclaration> namedParameters = [
+ for (bool hasNext = moveNext(); hasNext; hasNext = moveNext())
+ expectDeclaration()
+ ];
+
+ moveNext();
+ expectList();
+ List<ParameterDeclaration> positionalParameters = [
+ for (bool hasNext = moveNext(); hasNext; hasNext = moveNext())
+ expectDeclaration()
+ ];
+
+ moveNext();
+ TypeAnnotation returnType = expectTypeAnnotation();
+
+ moveNext();
+ expectList();
+ List<TypeParameterDeclaration> typeParameters = [
+ for (bool hasNext = moveNext(); hasNext; hasNext = moveNext())
+ expectDeclaration()
+ ];
+ return new FunctionDeclarationImpl(
+ name: name,
+ isAbstract: isAbstract,
+ isExternal: isExternal,
+ isGetter: isGetter,
+ isSetter: isSetter,
+ namedParameters: namedParameters,
+ positionalParameters: positionalParameters,
+ returnType: returnType,
+ typeParameters: typeParameters);
+ }
+
+ T expectCode<T extends Code>() {
+ CodeKind kind = CodeKind.values[expectNum()];
+ moveNext();
+ expectList();
+ List<Object> parts = [];
+ while (moveNext()) {
+ CodePartKind partKind = CodePartKind.values[expectNum()];
+ moveNext();
+ switch (partKind) {
+ case CodePartKind.code:
+ parts.add(expectCode());
+ break;
+ case CodePartKind.string:
+ parts.add(expectString());
+ break;
+ case CodePartKind.typeAnnotation:
+ parts.add(expectTypeAnnotation());
+ break;
+ }
+ }
+
+ switch (kind) {
+ case CodeKind.raw:
+ return new Code.fromParts(parts) as T;
+ case CodeKind.declaration:
+ return new DeclarationCode.fromParts(parts) as T;
+ case CodeKind.element:
+ return new ElementCode.fromParts(parts) as T;
+ case CodeKind.expression:
+ return new ExpressionCode.fromParts(parts) as T;
+ case CodeKind.functionBody:
+ return new FunctionBodyCode.fromParts(parts) as T;
+ case CodeKind.identifier:
+ return new IdentifierCode.fromParts(parts) as T;
+ case CodeKind.namedArgument:
+ return new NamedArgumentCode.fromParts(parts) as T;
+ case CodeKind.parameter:
+ return new ParameterCode.fromParts(parts) as T;
+ case CodeKind.statement:
+ return new StatementCode.fromParts(parts) as T;
+ }
+ }
+}
+
+/// On the server side we keep track of type annotations by their ID.
+final _typeAnnotationsById = <int, TypeAnnotation>{};
+
+/// On the client side we keep an expando of ids on [TypeAnnotation]s.
+final _typeAnnotationIds = new Expando<int>();
+
+/// Incrementing ids for [TypeAnnotationImpl]s
+int _nextTypeAnnotationId = 0;
+
+extension SerializeTypeAnnotation on TypeAnnotation {
+ void serialize(Serializer serializer) {
+ TypeAnnotation self = this;
+ if (self is NamedTypeAnnotationImpl) {
+ self.serialize(serializer);
+ } else if (self is FunctionTypeAnnotationImpl) {
+ self.serialize(serializer);
+ } else {
+ throw new UnsupportedError(
+ 'Type ${this.runtimeType} is not supported for serialization.');
+ }
+ }
+}
+
+/// Does the parts of serialization for type annotations that is shared between
+/// implementations.
+///
+/// Returns `false` if we should continue serializing the rest of the object, or
+/// `true` if the object is fully serialized (just an ID).
+bool _doSharedTypeAnnotationSerialization(Serializer serializer,
+ TypeAnnotation typeAnnotation, TypeAnnotationKind kind) {
+ switch (serializationMode) {
+ case SerializationMode.client:
+ // Only send the ID from the client side, and assume we have one.
+ int id = _typeAnnotationIds[typeAnnotation]!;
+ serializer.addNum(id);
+ return true;
+ case SerializationMode.server:
+ // Server side we may create new ids for unseen annotations,
+ // and continue to serialize the rest of the annotation.
+ int id = _typeAnnotationIds[typeAnnotation] ?? _nextTypeAnnotationId++;
+ // TODO: We should clean these up at some point.
+ _typeAnnotationsById[id] = typeAnnotation;
+ serializer.addNum(id);
+ break;
+ }
+ serializer.addNum(kind.index);
+ serializer.addBool(typeAnnotation.isNullable);
+ return false;
+}
+
+extension SerializeNamedTypeAnnotation on NamedTypeAnnotation {
+ void serialize(Serializer serializer) {
+ if (_doSharedTypeAnnotationSerialization(
+ serializer, this, TypeAnnotationKind.namedType)) {
+ return;
+ }
+ serializer.addString(name);
+ serializer.startList();
+ for (TypeAnnotation typeArg in typeArguments) {
+ typeArg.serialize(serializer);
+ }
+ serializer.endList();
+ }
+}
+
+extension SerializeFunctionTypeAnnotation on FunctionTypeAnnotation {
+ void serialize(Serializer serializer) {
+ if (_doSharedTypeAnnotationSerialization(
+ serializer, this, TypeAnnotationKind.functionType)) {
+ return;
+ }
+
+ returnType.serialize(serializer);
+
+ serializer.startList();
+ for (ParameterDeclaration param in positionalParameters) {
+ param.serialize(serializer);
+ }
+ serializer.endList();
+
+ serializer.startList();
+ for (ParameterDeclaration param in namedParameters) {
+ param.serialize(serializer);
+ }
+ serializer.endList();
+
+ serializer.startList();
+ for (TypeParameterDeclaration typeParam in typeParameters) {
+ typeParam.serialize(serializer);
+ }
+ serializer.endList();
+ }
+}
+
+/// Does the shared parts of [Declaration] serialization.
+void _serializeDeclaration(Serializer serializer, Declaration declaration) {
+ serializer.addNum(declaration.kind.index);
+ serializer.addString(declaration.name);
+}
+
+/// Checks the type and deserializes it appropriately.
+extension SerializeDeclaration on Declaration {
+ void serialize(Serializer serializer) {
+ switch (kind) {
+ case DeclarationKind.parameter:
+ (this as ParameterDeclaration).serialize(serializer);
+ break;
+ case DeclarationKind.typeParameter:
+ (this as TypeParameterDeclaration).serialize(serializer);
+ break;
+ case DeclarationKind.function:
+ (this as FunctionDeclaration).serialize(serializer);
+ break;
+ default:
+ throw new UnimplementedError('Cant serialize $kind yet');
+ }
+ }
+}
+
+extension SerializeParameterDeclaration on ParameterDeclaration {
+ void serialize(Serializer serializer) {
+ _serializeDeclaration(serializer, this);
+ if (defaultValue == null) {
+ serializer.addNull();
+ } else {
+ defaultValue!.serialize(serializer);
+ }
+ serializer.addBool(isNamed);
+ serializer.addBool(isRequired);
+ type.serialize(serializer);
+ }
+}
+
+extension SerializeTypeParameterDeclaration on TypeParameterDeclaration {
+ void serialize(Serializer serializer) {
+ _serializeDeclaration(serializer, this);
+ TypeAnnotation? bounds = this.bounds;
+ if (bounds == null) {
+ serializer.addNull();
+ } else {
+ bounds.serialize(serializer);
+ }
+ }
+}
+
+extension SerializeFunctionDeclaration on FunctionDeclaration {
+ void serialize(Serializer serializer) {
+ _serializeDeclaration(serializer, this);
+ serializer
+ ..addBool(isAbstract)
+ ..addBool(isExternal)
+ ..addBool(isGetter)
+ ..addBool(isSetter)
+ ..startList();
+ for (ParameterDeclaration named in namedParameters) {
+ named.serialize(serializer);
+ }
+ serializer
+ ..endList()
+ ..startList();
+ for (ParameterDeclaration positional in positionalParameters) {
+ positional.serialize(serializer);
+ }
+ serializer.endList();
+ returnType.serialize(serializer);
+ serializer.startList();
+ for (TypeParameterDeclaration param in typeParameters) {
+ param.serialize(serializer);
+ }
+ serializer.endList();
+ }
+}
+
+extension SerializeCode on Code {
+ void serialize(Serializer serializer) {
+ serializer
+ ..addNum(kind.index)
+ ..startList();
+ for (Object part in parts) {
+ if (part is String) {
+ serializer
+ ..addNum(CodePartKind.string.index)
+ ..addString(part);
+ } else if (part is Code) {
+ serializer.addNum(CodePartKind.code.index);
+ part.serialize(serializer);
+ } else if (part is TypeAnnotation) {
+ serializer.addNum(CodePartKind.typeAnnotation.index);
+ part.serialize(serializer);
+ } else {
+ throw new StateError('Unrecognized code part $part');
+ }
+ }
+ serializer.endList();
+ }
+}
+
+enum CodePartKind {
+ string,
+ code,
+ typeAnnotation,
+}
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/isolate_mirrors_executor/isolate_mirrors_executor.dart b/pkg/_fe_analyzer_shared/lib/src/macros/isolate_mirrors_executor/isolate_mirrors_executor.dart
index 48b0229..136a6d5 100644
--- a/pkg/_fe_analyzer_shared/lib/src/macros/isolate_mirrors_executor/isolate_mirrors_executor.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/isolate_mirrors_executor/isolate_mirrors_executor.dart
@@ -7,7 +7,7 @@
import 'dart:mirrors';
import 'isolate_mirrors_impl.dart';
-import 'protocol.dart';
+import '../executor_shared/protocol.dart';
import '../executor.dart';
import '../api.dart';
@@ -29,10 +29,10 @@
final SendPort _sendPort;
/// The stream of responses from the [_macroIsolate].
- final Stream<GenericResponse> _responseStream;
+ final Stream<Response> _responseStream;
/// A map of response completers by request id.
- final _responseCompleters = <int, Completer<GenericResponse>>{};
+ final _responseCompleters = <int, Completer<Response>>{};
/// A function that should be invoked when shutting down this executor
/// to perform any necessary cleanup.
@@ -41,7 +41,7 @@
_IsolateMirrorMacroExecutor._(
this._macroIsolate, this._sendPort, this._responseStream, this._onClose) {
_responseStream.listen((event) {
- Completer<GenericResponse>? completer =
+ Completer<Response>? completer =
_responseCompleters.remove(event.requestId);
if (completer == null) {
throw new StateError(
@@ -57,13 +57,13 @@
static Future<MacroExecutor> start() async {
ReceivePort receivePort = new ReceivePort();
Completer<SendPort> sendPortCompleter = new Completer<SendPort>();
- StreamController<GenericResponse> responseStreamController =
- new StreamController<GenericResponse>(sync: true);
+ StreamController<Response> responseStreamController =
+ new StreamController<Response>(sync: true);
receivePort.listen((message) {
if (!sendPortCompleter.isCompleted) {
sendPortCompleter.complete(message as SendPort);
} else {
- responseStreamController.add(message as GenericResponse);
+ responseStreamController.add(message as Response);
}
}).onDone(responseStreamController.close);
Isolate macroIsolate = await Isolate.spawn(spawn, receivePort.sendPort);
@@ -124,18 +124,24 @@
new InstantiateMacroRequest(macroClass, constructor, arguments));
@override
- Future<MacroClassIdentifier> loadMacro(Uri library, String name) =>
- _sendRequest(new LoadMacroRequest(library, name));
+ Future<MacroClassIdentifier> loadMacro(Uri library, String name,
+ {Uri? precompiledKernelUri}) {
+ if (precompiledKernelUri != null) {
+ // TODO: Implement support?
+ throw new UnsupportedError(
+ 'The IsolateMirrorsExecutor does not support precompiled dill files');
+ }
+ return _sendRequest(new LoadMacroRequest(library, name));
+ }
/// Sends a request and returns the response, casting it to the expected
/// type.
Future<T> _sendRequest<T>(Request request) async {
_sendPort.send(request);
- Completer<GenericResponse<T>> completer =
- new Completer<GenericResponse<T>>();
+ Completer<Response> completer = new Completer<Response>();
_responseCompleters[request.id] = completer;
- GenericResponse<T> response = await completer.future;
- T? result = response.response;
+ Response response = await completer.future;
+ T? result = response.response as T?;
if (result != null) return result;
throw response.error!;
}
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/isolate_mirrors_executor/isolate_mirrors_impl.dart b/pkg/_fe_analyzer_shared/lib/src/macros/isolate_mirrors_executor/isolate_mirrors_impl.dart
index 3cf24a5..e6848f8 100644
--- a/pkg/_fe_analyzer_shared/lib/src/macros/isolate_mirrors_executor/isolate_mirrors_impl.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/isolate_mirrors_executor/isolate_mirrors_impl.dart
@@ -6,8 +6,8 @@
import 'dart:isolate';
import 'dart:mirrors';
-import 'protocol.dart';
-import '../executor.dart';
+import '../executor_shared/response_impls.dart';
+import '../executor_shared/protocol.dart';
import '../api.dart';
/// Spawns a new isolate for loading and executing macros.
@@ -15,33 +15,28 @@
ReceivePort receivePort = new ReceivePort();
sendPort.send(receivePort.sendPort);
receivePort.listen((message) async {
+ Response response;
if (message is LoadMacroRequest) {
- GenericResponse<MacroClassIdentifier> response =
- await _loadMacro(message);
- sendPort.send(response);
+ response = await _loadMacro(message);
} else if (message is InstantiateMacroRequest) {
- GenericResponse<MacroInstanceIdentifier> response =
- await _instantiateMacro(message);
- sendPort.send(response);
+ response = await _instantiateMacro(message);
} else if (message is ExecuteDefinitionsPhaseRequest) {
- GenericResponse<MacroExecutionResult> response =
- await _executeDefinitionsPhase(message);
- sendPort.send(response);
+ response = await _executeDefinitionsPhase(message);
} else {
throw new StateError('Unrecognized event type $message');
}
+ sendPort.send(response);
});
}
/// Maps macro identifiers to class mirrors.
-final _macroClasses = <_MacroClassIdentifier, ClassMirror>{};
+final _macroClasses = <MacroClassIdentifierImpl, ClassMirror>{};
/// Handles [LoadMacroRequest]s.
-Future<GenericResponse<MacroClassIdentifier>> _loadMacro(
- LoadMacroRequest request) async {
+Future<Response> _loadMacro(LoadMacroRequest request) async {
try {
- _MacroClassIdentifier identifier =
- new _MacroClassIdentifier(request.library, request.name);
+ MacroClassIdentifierImpl identifier =
+ new MacroClassIdentifierImpl(request.library, request.name);
if (_macroClasses.containsKey(identifier)) {
throw new UnsupportedError(
'Reloading macros is not supported by this implementation');
@@ -51,18 +46,17 @@
ClassMirror macroClass =
libMirror.declarations[new Symbol(request.name)] as ClassMirror;
_macroClasses[identifier] = macroClass;
- return new GenericResponse(response: identifier, requestId: request.id);
+ return new Response(response: identifier, requestId: request.id);
} catch (e) {
- return new GenericResponse(error: e, requestId: request.id);
+ return new Response(error: e, requestId: request.id);
}
}
/// Maps macro instance identifiers to instances.
-final _macroInstances = <_MacroInstanceIdentifier, Macro>{};
+final _macroInstances = <MacroInstanceIdentifierImpl, Macro>{};
/// Handles [InstantiateMacroRequest]s.
-Future<GenericResponse<MacroInstanceIdentifier>> _instantiateMacro(
- InstantiateMacroRequest request) async {
+Future<Response> _instantiateMacro(InstantiateMacroRequest request) async {
try {
ClassMirror? clazz = _macroClasses[request.macroClass];
if (clazz == null) {
@@ -73,16 +67,15 @@
for (MapEntry<String, Object?> entry in request.arguments.named.entries)
new Symbol(entry.key): entry.value,
}).reflectee as Macro;
- _MacroInstanceIdentifier identifier = new _MacroInstanceIdentifier();
+ MacroInstanceIdentifierImpl identifier = new MacroInstanceIdentifierImpl();
_macroInstances[identifier] = instance;
- return new GenericResponse<MacroInstanceIdentifier>(
- response: identifier, requestId: request.id);
+ return new Response(response: identifier, requestId: request.id);
} catch (e) {
- return new GenericResponse(error: e, requestId: request.id);
+ return new Response(error: e, requestId: request.id);
}
}
-Future<GenericResponse<MacroExecutionResult>> _executeDefinitionsPhase(
+Future<Response> _executeDefinitionsPhase(
ExecuteDefinitionsPhaseRequest request) async {
try {
Macro? instance = _macroInstances[request.macro];
@@ -93,163 +86,18 @@
Declaration declaration = request.declaration;
if (instance is FunctionDefinitionMacro &&
declaration is FunctionDeclaration) {
- _FunctionDefinitionBuilder builder = new _FunctionDefinitionBuilder(
+ FunctionDefinitionBuilderImpl builder = new FunctionDefinitionBuilderImpl(
declaration,
request.typeResolver,
request.typeDeclarationResolver,
request.classIntrospector);
await instance.buildDefinitionForFunction(declaration, builder);
- return new GenericResponse(
- response: builder.result, requestId: request.id);
+ return new Response(response: builder.result, requestId: request.id);
} else {
throw new UnsupportedError(
('Only FunctionDefinitionMacros are supported currently'));
}
} catch (e) {
- return new GenericResponse(error: e, requestId: request.id);
+ return new Response(error: e, requestId: request.id);
}
}
-
-/// Our implementation of [MacroClassIdentifier].
-class _MacroClassIdentifier implements MacroClassIdentifier {
- final String id;
-
- _MacroClassIdentifier(Uri library, String name) : id = '$library#$name';
-
- operator ==(other) => other is _MacroClassIdentifier && id == other.id;
-
- int get hashCode => id.hashCode;
-}
-
-/// Our implementation of [MacroInstanceIdentifier].
-class _MacroInstanceIdentifier implements MacroInstanceIdentifier {
- static int _next = 0;
-
- final int id;
-
- _MacroInstanceIdentifier() : id = _next++;
-
- operator ==(other) => other is _MacroInstanceIdentifier && id == other.id;
-
- int get hashCode => id;
-}
-
-/// Our implementation of [MacroExecutionResult].
-class _MacroExecutionResult implements MacroExecutionResult {
- @override
- final List<DeclarationCode> augmentations = <DeclarationCode>[];
-
- @override
- final List<DeclarationCode> imports = <DeclarationCode>[];
-}
-
-/// Custom implementation of [FunctionDefinitionBuilder].
-class _FunctionDefinitionBuilder implements FunctionDefinitionBuilder {
- final TypeResolver typeResolver;
- final TypeDeclarationResolver typeDeclarationResolver;
- final ClassIntrospector classIntrospector;
-
- /// The declaration this is a builder for.
- final FunctionDeclaration declaration;
-
- /// The final result, will be built up over `augment` calls.
- final _MacroExecutionResult result = new _MacroExecutionResult();
-
- _FunctionDefinitionBuilder(this.declaration, this.typeResolver,
- this.typeDeclarationResolver, this.classIntrospector);
-
- @override
- void augment(FunctionBodyCode body) {
- result.augmentations.add(new DeclarationCode.fromParts([
- 'augment ',
- declaration.returnType.code,
- ' ',
- declaration.name,
- if (declaration.typeParameters.isNotEmpty) ...[
- '<',
- for (TypeParameterDeclaration typeParam
- in declaration.typeParameters) ...[
- typeParam.name,
- if (typeParam.bounds != null) ...['extends ', typeParam.bounds!.code],
- if (typeParam != declaration.typeParameters.last) ', ',
- ],
- '>',
- ],
- '(',
- for (ParameterDeclaration positionalRequired
- in declaration.positionalParameters.where((p) => p.isRequired)) ...[
- new ParameterCode.fromParts([
- positionalRequired.type.code,
- ' ',
- positionalRequired.name,
- ]),
- ', '
- ],
- if (declaration.positionalParameters.any((p) => !p.isRequired)) ...[
- '[',
- for (ParameterDeclaration positionalOptional in declaration
- .positionalParameters
- .where((p) => !p.isRequired)) ...[
- new ParameterCode.fromParts([
- positionalOptional.type.code,
- ' ',
- positionalOptional.name,
- ]),
- ', ',
- ],
- ']',
- ],
- if (declaration.namedParameters.isNotEmpty) ...[
- '{',
- for (ParameterDeclaration named in declaration.namedParameters) ...[
- new ParameterCode.fromParts([
- if (named.isRequired) 'required ',
- named.type.code,
- ' ',
- named.name,
- if (named.defaultValue != null) ...[
- ' = ',
- named.defaultValue!,
- ],
- ]),
- ', ',
- ],
- '}',
- ],
- ') ',
- body,
- ]));
- }
-
- @override
- Future<List<ConstructorDeclaration>> constructorsOf(ClassDeclaration clazz) =>
- classIntrospector.constructorsOf(clazz);
-
- @override
- Future<List<FieldDeclaration>> fieldsOf(ClassDeclaration clazz) =>
- classIntrospector.fieldsOf(clazz);
-
- @override
- Future<List<ClassDeclaration>> interfacesOf(ClassDeclaration clazz) =>
- classIntrospector.interfacesOf(clazz);
-
- @override
- Future<List<MethodDeclaration>> methodsOf(ClassDeclaration clazz) =>
- classIntrospector.methodsOf(clazz);
-
- @override
- Future<List<ClassDeclaration>> mixinsOf(ClassDeclaration clazz) =>
- classIntrospector.mixinsOf(clazz);
-
- @override
- Future<TypeDeclaration> declarationOf(NamedStaticType annotation) =>
- typeDeclarationResolver.declarationOf(annotation);
-
- @override
- Future<ClassDeclaration?> superclassOf(ClassDeclaration clazz) =>
- classIntrospector.superclassOf(clazz);
-
- @override
- Future<StaticType> resolve(TypeAnnotation typeAnnotation) =>
- typeResolver.resolve(typeAnnotation);
-}
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/isolate_mirrors_executor/protocol.dart b/pkg/_fe_analyzer_shared/lib/src/macros/isolate_mirrors_executor/protocol.dart
deleted file mode 100644
index 96a2724..0000000
--- a/pkg/_fe_analyzer_shared/lib/src/macros/isolate_mirrors_executor/protocol.dart
+++ /dev/null
@@ -1,61 +0,0 @@
-// 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.
-
-/// Defines the objects used for communication between the macro executor and
-/// the isolate doing the work of macro loading and execution.
-library protocol;
-
-import '../executor.dart';
-import '../api.dart';
-
-/// Base class all requests extend, provides a unique id for each request.
-class Request {
- final int id;
-
- Request() : id = _next++;
-
- static int _next = 0;
-}
-
-/// A generic response object that is either an instance of [T] or an error.
-class GenericResponse<T> {
- final T? response;
- final Object? error;
- final int requestId;
-
- GenericResponse({this.response, this.error, required this.requestId})
- : assert(response != null || error != null),
- assert(response == null || error == null);
-}
-
-/// A request to load a macro in this isolate.
-class LoadMacroRequest extends Request {
- final Uri library;
- final String name;
-
- LoadMacroRequest(this.library, this.name);
-}
-
-/// A request to instantiate a macro instance.
-class InstantiateMacroRequest extends Request {
- final MacroClassIdentifier macroClass;
- final String constructorName;
- final Arguments arguments;
-
- InstantiateMacroRequest(
- this.macroClass, this.constructorName, this.arguments);
-}
-
-/// A request to execute a macro on a particular declaration in the definition
-/// phase.
-class ExecuteDefinitionsPhaseRequest extends Request {
- final MacroInstanceIdentifier macro;
- final Declaration declaration;
- final TypeResolver typeResolver;
- final ClassIntrospector classIntrospector;
- final TypeDeclarationResolver typeDeclarationResolver;
-
- ExecuteDefinitionsPhaseRequest(this.macro, this.declaration,
- this.typeResolver, this.classIntrospector, this.typeDeclarationResolver);
-}
diff --git a/pkg/_fe_analyzer_shared/lib/src/macros/isolated_executor/isolated_executor.dart b/pkg/_fe_analyzer_shared/lib/src/macros/isolated_executor/isolated_executor.dart
new file mode 100644
index 0000000..b33dd94
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/lib/src/macros/isolated_executor/isolated_executor.dart
@@ -0,0 +1,227 @@
+// 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.
+
+import 'dart:async';
+import 'dart:isolate';
+
+import '../api.dart';
+import '../executor_shared/protocol.dart';
+import '../executor_shared/serialization.dart';
+import '../executor_shared/response_impls.dart';
+import '../executor.dart';
+
+/// Returns an instance of [_IsolatedMacroExecutor].
+///
+/// This is the only public api exposed by this library.
+Future<MacroExecutor> start() async => new _IsolatedMacroExecutor();
+
+/// A [MacroExecutor] implementation which spawns a separate isolate for each
+/// macro that is loaded. Each of these is wrapped in its own
+/// [_SingleIsolatedMacroExecutor] which requests are delegated to.
+///
+/// This implementation requires precompiled kernel files when loading macros,
+/// (you must pass a `precompiledKernelUri` to [loadMacro]).
+///
+/// Spawned isolates are not ran in the same isolate group, so objects are
+/// serialized between isolates.
+class _IsolatedMacroExecutor implements MacroExecutor {
+ /// Individual executors indexed by [MacroClassIdentifier] or
+ /// [MacroInstanceIdentifier].
+ final _executors = <Object, _SingleIsolatedMacroExecutor>{};
+
+ @override
+ Future<String> buildAugmentationLibrary(
+ Iterable<MacroExecutionResult> macroResults) {
+ // TODO: implement buildAugmentationLibrary
+ throw new UnimplementedError();
+ }
+
+ @override
+ void close() {
+ for (_SingleIsolatedMacroExecutor executor in _executors.values) {
+ executor.close();
+ }
+ }
+
+ @override
+ Future<MacroExecutionResult> executeDeclarationsPhase(
+ MacroInstanceIdentifier macro,
+ Declaration declaration,
+ TypeResolver typeResolver,
+ ClassIntrospector classIntrospector) =>
+ _executors[macro]!.executeDeclarationsPhase(
+ macro, declaration, typeResolver, classIntrospector);
+
+ @override
+ Future<MacroExecutionResult> executeDefinitionsPhase(
+ MacroInstanceIdentifier macro,
+ Declaration declaration,
+ TypeResolver typeResolver,
+ ClassIntrospector classIntrospector,
+ TypeDeclarationResolver typeDeclarationResolver) =>
+ _executors[macro]!.executeDefinitionsPhase(macro, declaration,
+ typeResolver, classIntrospector, typeDeclarationResolver);
+
+ @override
+ Future<MacroExecutionResult> executeTypesPhase(
+ MacroInstanceIdentifier macro, Declaration declaration) =>
+ _executors[macro]!.executeTypesPhase(macro, declaration);
+
+ @override
+ Future<MacroInstanceIdentifier> instantiateMacro(
+ MacroClassIdentifier macroClass,
+ String constructor,
+ Arguments arguments) async {
+ _SingleIsolatedMacroExecutor executor = _executors[macroClass]!;
+ MacroInstanceIdentifier instance =
+ await executor.instantiateMacro(macroClass, constructor, arguments);
+ _executors[instance] = executor;
+ return instance;
+ }
+
+ @override
+ Future<MacroClassIdentifier> loadMacro(Uri library, String name,
+ {Uri? precompiledKernelUri}) async {
+ if (precompiledKernelUri == null) {
+ throw new UnsupportedError(
+ 'This environment requires a non-null `precompiledKernelUri` to be '
+ 'passed when loading macros.');
+ }
+ MacroClassIdentifier identifier =
+ new MacroClassIdentifierImpl(library, name);
+ _executors.remove(identifier)?.close();
+
+ _SingleIsolatedMacroExecutor executor =
+ await _SingleIsolatedMacroExecutor.start(
+ library, name, precompiledKernelUri);
+ _executors[identifier] = executor;
+ return identifier;
+ }
+}
+
+class _SingleIsolatedMacroExecutor extends MacroExecutor {
+ /// The stream on which we receive responses.
+ final Stream<Response> responseStream;
+
+ /// The send port where we should send requests.
+ final SendPort sendPort;
+
+ /// A function that should be invoked when shutting down this executor
+ /// to perform any necessary cleanup.
+ final void Function() onClose;
+
+ /// A map of response completers by request id.
+ final responseCompleters = <int, Completer<Response>>{};
+
+ _SingleIsolatedMacroExecutor(
+ {required this.onClose,
+ required this.responseStream,
+ required this.sendPort}) {
+ responseStream.listen((event) {
+ Completer<Response>? completer =
+ responseCompleters.remove(event.requestId);
+ if (completer == null) {
+ throw new StateError(
+ 'Got a response for an unrecognized request id ${event.requestId}');
+ }
+ completer.complete(event);
+ });
+ }
+
+ static Future<_SingleIsolatedMacroExecutor> start(
+ Uri library, String name, Uri precompiledKernelUri) async {
+ ReceivePort receivePort = new ReceivePort();
+ Isolate isolate =
+ await Isolate.spawnUri(precompiledKernelUri, [], receivePort.sendPort);
+ Completer<SendPort> sendPortCompleter = new Completer();
+ StreamController<Response> responseStreamController =
+ new StreamController(sync: true);
+ receivePort.listen((message) {
+ if (!sendPortCompleter.isCompleted) {
+ sendPortCompleter.complete(message as SendPort);
+ } else {
+ withSerializationMode(SerializationMode.server, () {
+ JsonDeserializer deserializer =
+ new JsonDeserializer(message as List<Object?>);
+ SerializableResponse response =
+ new SerializableResponse.deserialize(deserializer);
+ responseStreamController.add(response);
+ });
+ }
+ }).onDone(responseStreamController.close);
+
+ return new _SingleIsolatedMacroExecutor(
+ onClose: () {
+ receivePort.close();
+ isolate.kill();
+ },
+ responseStream: responseStreamController.stream,
+ sendPort: await sendPortCompleter.future);
+ }
+
+ @override
+ void close() => onClose();
+
+ /// These calls are handled by the higher level executor.
+ @override
+ Future<String> buildAugmentationLibrary(
+ Iterable<MacroExecutionResult> macroResults) =>
+ throw new StateError('Unreachable');
+
+ @override
+ Future<MacroExecutionResult> executeDeclarationsPhase(
+ MacroInstanceIdentifier macro,
+ Declaration declaration,
+ TypeResolver typeResolver,
+ ClassIntrospector classIntrospector) {
+ // TODO: implement executeDeclarationsPhase
+ throw new UnimplementedError();
+ }
+
+ @override
+ Future<MacroExecutionResult> executeDefinitionsPhase(
+ MacroInstanceIdentifier macro,
+ Declaration declaration,
+ TypeResolver typeResolver,
+ ClassIntrospector classIntrospector,
+ TypeDeclarationResolver typeDeclarationResolver) =>
+ _sendRequest(new ExecuteDefinitionsPhaseRequest(macro, declaration,
+ typeResolver, classIntrospector, typeDeclarationResolver));
+
+ @override
+ Future<MacroExecutionResult> executeTypesPhase(
+ MacroInstanceIdentifier macro, Declaration declaration) {
+ // TODO: implement executeTypesPhase
+ throw new UnimplementedError();
+ }
+
+ @override
+ Future<MacroInstanceIdentifier> instantiateMacro(
+ MacroClassIdentifier macroClass,
+ String constructor,
+ Arguments arguments) =>
+ _sendRequest(
+ new InstantiateMacroRequest(macroClass, constructor, arguments));
+
+ /// These calls are handled by the higher level executor.
+ @override
+ Future<MacroClassIdentifier> loadMacro(Uri library, String name,
+ {Uri? precompiledKernelUri}) =>
+ throw new StateError('Unreachable');
+
+ /// Sends a [request] and handles the response, casting it to the expected
+ /// type or throwing the error provided.
+ Future<T> _sendRequest<T>(Request request) =>
+ withSerializationMode(SerializationMode.server, () async {
+ JsonSerializer serializer = new JsonSerializer();
+ request.serialize(serializer);
+ sendPort.send(serializer.result);
+ Completer<Response> completer = new Completer<Response>();
+ responseCompleters[request.id] = completer;
+ Response response = await completer.future;
+ T? result = response.response as T?;
+ if (result != null) return result;
+ throw response.error!;
+ });
+}
diff --git a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
index 204bd51..aa65f2b 100644
--- a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
@@ -2779,12 +2779,12 @@
problemMessage: r"""An enum declaration can't be empty.""");
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Null> codeEnumDeclaresFactory = messageEnumDeclaresFactory;
+const Code<Null> codeEnumDeclaresConstFactory = messageEnumDeclaresConstFactory;
// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const MessageCode messageEnumDeclaresFactory = const MessageCode(
- "EnumDeclaresFactory",
- problemMessage: r"""Enums can't declare factory constructors.""",
+const MessageCode messageEnumDeclaresConstFactory = const MessageCode(
+ "EnumDeclaresConstFactory",
+ problemMessage: r"""Enums can't declare const factory constructors.""",
correctionMessage:
r"""Try removing the factory constructor declaration.""");
diff --git a/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart b/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
index 43e8331..a441a40 100644
--- a/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/parser/parser_impl.dart
@@ -4375,8 +4375,6 @@
case DeclarationKind.TopLevel:
throw "Internal error: TopLevel factory.";
case DeclarationKind.Enum:
- reportRecoverableError(
- factoryKeyword, codes.messageEnumDeclaresFactory);
listener.endEnumFactoryMethod(beforeStart.next!, factoryKeyword, token);
break;
}
diff --git a/pkg/_fe_analyzer_shared/test/macros/executor_shared/serialization_test.dart b/pkg/_fe_analyzer_shared/test/macros/executor_shared/serialization_test.dart
new file mode 100644
index 0000000..c069423
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/test/macros/executor_shared/serialization_test.dart
@@ -0,0 +1,78 @@
+// 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.
+
+import 'package:_fe_analyzer_shared/src/macros/executor_shared/serialization.dart';
+import 'package:test/test.dart';
+
+void main() {
+ group('json serializer', () {
+ test('can serialize and deserialize data', () {
+ var serializer = JsonSerializer();
+ serializer
+ ..addNum(1)
+ ..addNullableNum(null)
+ ..addString('hello')
+ ..addNullableString(null)
+ ..startList()
+ ..addBool(true)
+ ..startList()
+ ..addNull()
+ ..endList()
+ ..addNullableBool(null)
+ ..endList()
+ ..addNum(1.0)
+ ..startList()
+ ..endList();
+ expect(
+ serializer.result,
+ equals([
+ 1,
+ null,
+ 'hello',
+ null,
+ [
+ true,
+ [null],
+ null
+ ],
+ 1.0,
+ [],
+ ]));
+ var deserializer = JsonDeserializer(serializer.result);
+ expect(deserializer.moveNext(), true);
+ expect(deserializer.expectNum(), 1);
+ expect(deserializer.moveNext(), true);
+ expect(deserializer.expectNullableNum(), null);
+ expect(deserializer.moveNext(), true);
+ expect(deserializer.expectString(), 'hello');
+ expect(deserializer.moveNext(), true);
+ expect(deserializer.expectNullableString(), null);
+ expect(deserializer.moveNext(), true);
+
+ deserializer.expectList();
+ expect(deserializer.moveNext(), true);
+ expect(deserializer.expectBool(), true);
+ expect(deserializer.moveNext(), true);
+
+ deserializer.expectList();
+ expect(deserializer.moveNext(), true);
+ expect(deserializer.checkNull(), true);
+ expect(deserializer.moveNext(), false);
+
+ expect(deserializer.moveNext(), true);
+ expect(deserializer.expectNullableBool(), null);
+ expect(deserializer.moveNext(), false);
+
+ // Have to move the parent again to advance it past the list entry.
+ expect(deserializer.moveNext(), true);
+ expect(deserializer.expectNum(), 1.0);
+ expect(deserializer.moveNext(), true);
+
+ deserializer.expectList();
+ expect(deserializer.moveNext(), false);
+
+ expect(deserializer.moveNext(), false);
+ });
+ });
+}
diff --git a/pkg/_fe_analyzer_shared/test/macros/isolate_mirror_executor/isolate_mirror_executor_test.dart b/pkg/_fe_analyzer_shared/test/macros/isolate_mirror_executor/isolate_mirror_executor_test.dart
index ab7b057..7056208 100644
--- a/pkg/_fe_analyzer_shared/test/macros/isolate_mirror_executor/isolate_mirror_executor_test.dart
+++ b/pkg/_fe_analyzer_shared/test/macros/isolate_mirror_executor/isolate_mirror_executor_test.dart
@@ -6,6 +6,7 @@
import 'package:_fe_analyzer_shared/src/macros/api.dart';
import 'package:_fe_analyzer_shared/src/macros/executor.dart';
+import 'package:_fe_analyzer_shared/src/macros/executor_shared/introspection_impls.dart';
import 'package:_fe_analyzer_shared/src/macros/isolate_mirrors_executor/isolate_mirrors_executor.dart'
as mirrorExecutor;
@@ -26,7 +27,7 @@
test('can load macros and create instances', () async {
var clazzId = await executor.loadMacro(
// Tests run from the root of the repo.
- File('pkg/_fe_analyzer_shared/test/macros/isolate_mirror_executor/simple_macro.dart')
+ File('pkg/_fe_analyzer_shared/test/macros/simple_macro.dart')
.absolute
.uri,
'SimpleMacro');
@@ -49,7 +50,7 @@
var definitionResult = await executor.executeDefinitionsPhase(
instanceId,
- _FunctionDeclaration(
+ FunctionDeclarationImpl(
isAbstract: false,
isExternal: false,
isGetter: false,
@@ -57,8 +58,8 @@
name: 'foo',
namedParameters: [],
positionalParameters: [],
- returnType:
- _TypeAnnotation(Code.fromString('String'), isNullable: false),
+ returnType: NamedTypeAnnotationImpl(
+ name: 'String', isNullable: false, typeArguments: const []),
typeParameters: [],
),
_FakeTypeResolver(),
@@ -82,63 +83,14 @@
with Fake
implements TypeDeclarationResolver {}
-class _FunctionDeclaration implements FunctionDeclaration {
- @override
- final bool isAbstract;
-
- @override
- final bool isExternal;
-
- @override
- final bool isGetter;
-
- @override
- final bool isSetter;
-
- @override
- final String name;
-
- @override
- final Iterable<ParameterDeclaration> namedParameters;
-
- @override
- final Iterable<ParameterDeclaration> positionalParameters;
-
- @override
- final TypeAnnotation returnType;
-
- @override
- final Iterable<TypeParameterDeclaration> typeParameters;
-
- _FunctionDeclaration({
- required this.isAbstract,
- required this.isExternal,
- required this.isGetter,
- required this.isSetter,
- required this.name,
- required this.namedParameters,
- required this.positionalParameters,
- required this.returnType,
- required this.typeParameters,
- });
-}
-
-class _TypeAnnotation implements TypeAnnotation {
- @override
- final Code code;
-
- @override
- final bool isNullable;
-
- _TypeAnnotation(this.code, {required this.isNullable});
-}
-
extension _ on Code {
StringBuffer debugString([StringBuffer? buffer]) {
buffer ??= StringBuffer();
for (var part in parts) {
if (part is Code) {
part.debugString(buffer);
+ } else if (part is TypeAnnotation) {
+ part.code.debugString(buffer);
} else {
buffer.write(part.toString());
}
diff --git a/pkg/_fe_analyzer_shared/test/macros/isolated_executor/isolated_executor_test.dart b/pkg/_fe_analyzer_shared/test/macros/isolated_executor/isolated_executor_test.dart
new file mode 100644
index 0000000..4659971
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/test/macros/isolated_executor/isolated_executor_test.dart
@@ -0,0 +1,122 @@
+// 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.
+
+import 'dart:io';
+import 'dart:isolate';
+
+import 'package:_fe_analyzer_shared/src/macros/api.dart';
+import 'package:_fe_analyzer_shared/src/macros/bootstrap.dart';
+import 'package:_fe_analyzer_shared/src/macros/executor.dart';
+import 'package:_fe_analyzer_shared/src/macros/executor_shared/introspection_impls.dart';
+import 'package:_fe_analyzer_shared/src/macros/isolated_executor/isolated_executor.dart'
+ as isolatedExecutor;
+
+import 'package:test/fake.dart';
+import 'package:test/test.dart';
+
+void main() {
+ late MacroExecutor executor;
+ late Directory tmpDir;
+
+ setUp(() async {
+ executor = await isolatedExecutor.start();
+ tmpDir = Directory.systemTemp.createTempSync('isolated_executor_test');
+ });
+
+ tearDown(() {
+ if (tmpDir.existsSync()) tmpDir.deleteSync(recursive: true);
+ executor.close();
+ });
+
+ test('can load macros and create instances', () async {
+ // Tests run from the root of the repo.
+ var macroUri = File('pkg/_fe_analyzer_shared/test/macros/simple_macro.dart')
+ .absolute
+ .uri;
+ var macroName = 'SimpleMacro';
+
+ var bootstrapContent =
+ bootstrapMacroIsolate(macroUri.toString(), macroName, ['', 'named']);
+ var bootstrapFile = File(tmpDir.uri.resolve('main.dart').toFilePath())
+ ..writeAsStringSync(bootstrapContent);
+ var kernelOutputFile =
+ File(tmpDir.uri.resolve('main.dart.dill').toFilePath());
+ var result = await Process.run(Platform.resolvedExecutable, [
+ '--snapshot=${kernelOutputFile.uri.toFilePath()}',
+ '--snapshot-kind=kernel',
+ '--packages=${(await Isolate.packageConfig)!}',
+ bootstrapFile.uri.toFilePath(),
+ ]);
+ expect(result.exitCode, 0,
+ reason: 'stdout: ${result.stdout}\nstderr: ${result.stderr}');
+
+ var clazzId = await executor.loadMacro(macroUri, macroName,
+ precompiledKernelUri: kernelOutputFile.uri);
+ expect(clazzId, isNotNull, reason: 'Can load a macro.');
+
+ var instanceId =
+ await executor.instantiateMacro(clazzId, '', Arguments([], {}));
+ expect(instanceId, isNotNull,
+ reason: 'Can create an instance with no arguments.');
+
+ instanceId =
+ await executor.instantiateMacro(clazzId, '', Arguments([1, 2], {}));
+ expect(instanceId, isNotNull,
+ reason: 'Can create an instance with positional arguments.');
+
+ instanceId = await executor.instantiateMacro(
+ clazzId, 'named', Arguments([], {'x': 1, 'y': 2}));
+ expect(instanceId, isNotNull,
+ reason: 'Can create an instance with named arguments.');
+
+ var definitionResult = await executor.executeDefinitionsPhase(
+ instanceId,
+ FunctionDeclarationImpl(
+ isAbstract: false,
+ isExternal: false,
+ isGetter: false,
+ isSetter: false,
+ name: 'foo',
+ namedParameters: [],
+ positionalParameters: [],
+ returnType: NamedTypeAnnotationImpl(
+ name: 'String', isNullable: false, typeArguments: const []),
+ typeParameters: [],
+ ),
+ _FakeTypeResolver(),
+ _FakeClassIntrospector(),
+ _FakeTypeDeclarationResolver());
+ expect(definitionResult.augmentations, hasLength(1));
+ expect(definitionResult.augmentations.first.debugString().toString(),
+ equalsIgnoringWhitespace('''
+ augment String foo() {
+ print('x: 1, y: 2');
+ return augment super();
+ }'''));
+ });
+}
+
+class _FakeClassIntrospector with Fake implements ClassIntrospector {}
+
+class _FakeTypeResolver with Fake implements TypeResolver {}
+
+class _FakeTypeDeclarationResolver
+ with Fake
+ implements TypeDeclarationResolver {}
+
+extension _ on Code {
+ StringBuffer debugString([StringBuffer? buffer]) {
+ buffer ??= StringBuffer();
+ for (var part in parts) {
+ if (part is Code) {
+ part.debugString(buffer);
+ } else if (part is TypeAnnotation) {
+ part.code.debugString(buffer);
+ } else {
+ buffer.write(part.toString());
+ }
+ }
+ return buffer;
+ }
+}
diff --git a/pkg/_fe_analyzer_shared/test/macros/isolate_mirror_executor/simple_macro.dart b/pkg/_fe_analyzer_shared/test/macros/simple_macro.dart
similarity index 100%
rename from pkg/_fe_analyzer_shared/test/macros/isolate_mirror_executor/simple_macro.dart
rename to pkg/_fe_analyzer_shared/test/macros/simple_macro.dart
diff --git a/pkg/analysis_server/lib/src/services/refactoring/rename_local.dart b/pkg/analysis_server/lib/src/services/refactoring/rename_local.dart
index 6fe772e..3bb1fae 100644
--- a/pkg/analysis_server/lib/src/services/refactoring/rename_local.dart
+++ b/pkg/analysis_server/lib/src/services/refactoring/rename_local.dart
@@ -82,9 +82,18 @@
processor.addDeclarationEdit(element);
var references = await searchEngine.searchReferences(element);
- // Exclude "implicit" references to optional positional parameters.
- if (element is ParameterElement && element.isOptionalPositional) {
- references.removeWhere((match) => match.sourceRange.length == 0);
+ // Remove references that don't have to have the same name.
+ if (element is ParameterElement) {
+ // Implicit references to optional positional parameters.
+ if (element.isOptionalPositional) {
+ references.removeWhere((match) => match.sourceRange.length == 0);
+ }
+ // References to positional parameters from super-formal.
+ if (element.isPositional) {
+ references.removeWhere(
+ (match) => match.element is SuperFormalParameterElement,
+ );
+ }
}
processor.addReferenceEdits(references);
diff --git a/pkg/analysis_server/test/services/refactoring/rename_local_test.dart b/pkg/analysis_server/test/services/refactoring/rename_local_test.dart
index 5b42916..16a846e 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_local_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_local_test.dart
@@ -565,6 +565,31 @@
''');
}
+ Future<void> test_createChange_parameter_named_super() async {
+ await indexTestUnit('''
+class A {
+ A({required int test}); // 0
+}
+class B extends A {
+ B({required super.test});
+}
+''');
+ // configure refactoring
+ createRenameRefactoringAtString('test}); // 0');
+ expect(refactoring.refactoringName, 'Rename Parameter');
+ expect(refactoring.elementKindName, 'parameter');
+ refactoring.newName = 'newName';
+ // validate change
+ return assertSuccessfulRefactoring('''
+class A {
+ A({required int newName}); // 0
+}
+class B extends A {
+ B({required super.newName});
+}
+''');
+ }
+
Future<void> test_createChange_parameter_named_updateHierarchy() async {
await indexUnit('$testPackageLibPath/test2.dart', '''
library test2;
@@ -654,6 +679,33 @@
''');
}
+ Future<void> test_createChange_parameter_positional_super() async {
+ await indexTestUnit('''
+class A {
+ A(int test); // 0
+}
+class B extends A {
+ B(super.test);
+}
+''');
+
+ createRenameRefactoringAtString('test); // 0');
+ expect(refactoring.refactoringName, 'Rename Parameter');
+ expect(refactoring.elementKindName, 'parameter');
+ refactoring.newName = 'newName';
+
+ // The name of the super-formal parameter does not have to be the same.
+ // So, we don't rename it.
+ return assertSuccessfulRefactoring('''
+class A {
+ A(int newName); // 0
+}
+class B extends A {
+ B(super.test);
+}
+''');
+ }
+
Future<void> test_oldName() async {
await indexTestUnit('''
void f() {
diff --git a/pkg/analysis_server/test/services/search/search_engine_test.dart b/pkg/analysis_server/test/services/search/search_engine_test.dart
index 07feae1..43637ae 100644
--- a/pkg/analysis_server/test/services/search/search_engine_test.dart
+++ b/pkg/analysis_server/test/services/search/search_engine_test.dart
@@ -344,6 +344,36 @@
assertHasOne(a, 'a');
}
+ Future<void>
+ test_searchReferences_parameter_ofConstructor_super_named() async {
+ var code = '''
+class A {
+ A({required int a});
+}
+class B extends A {
+ B({required super.a}); // ref
+}
+''';
+ await resolveTestCode(code);
+
+ var element = findElement.unnamedConstructor('A').parameter('a');
+ var matches = await searchEngine.searchReferences(element);
+ expect(
+ matches,
+ unorderedEquals([
+ predicate((SearchMatch m) {
+ return m.kind == MatchKind.REFERENCE &&
+ identical(
+ m.element,
+ findElement.unnamedConstructor('B').superFormalParameter('a'),
+ ) &&
+ m.sourceRange.offset == code.indexOf('a}); // ref') &&
+ m.sourceRange.length == 1;
+ }),
+ ]),
+ );
+ }
+
Future<void> test_searchTopLevelDeclarations() async {
newFile('$testPackageLibPath/a.dart', content: '''
class A {}
diff --git a/pkg/analyzer/CHANGELOG.md b/pkg/analyzer/CHANGELOG.md
index a6f4d42..1d47825 100644
--- a/pkg/analyzer/CHANGELOG.md
+++ b/pkg/analyzer/CHANGELOG.md
@@ -1,6 +1,7 @@
## 3.1.0-dev
* New internal API for `package:dart_style`.
* Removed deprecated non-API `MockSdk` class.
+* Removed deprecated `AnalysisDriver` constructor.
## 3.0.0
* Removed deprecated `DartType.aliasElement/aliasArguments`.
diff --git a/pkg/analyzer/lib/src/clients/build_resolvers/build_resolvers.dart b/pkg/analyzer/lib/src/clients/build_resolvers/build_resolvers.dart
index 9becaf1..be9069c 100644
--- a/pkg/analyzer/lib/src/clients/build_resolvers/build_resolvers.dart
+++ b/pkg/analyzer/lib/src/clients/build_resolvers/build_resolvers.dart
@@ -51,7 +51,7 @@
var logger = PerformanceLog(null);
var scheduler = AnalysisDriverScheduler(logger);
- var driver = AnalysisDriver.tmp1(
+ var driver = AnalysisDriver(
scheduler: scheduler,
logger: logger,
resourceProvider: resourceProvider,
diff --git a/pkg/analyzer/lib/src/context/context_root.dart b/pkg/analyzer/lib/src/context/context_root.dart
deleted file mode 100644
index 5155947..0000000
--- a/pkg/analyzer/lib/src/context/context_root.dart
+++ /dev/null
@@ -1,78 +0,0 @@
-// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'package:path/path.dart' as path;
-
-/// Information about the root directory associated with an analysis context.
-///
-/// Clients may not extend, implement or mix-in this class.
-class ContextRoot {
- /// The path context to use when manipulating paths.
- final path.Context pathContext;
-
- /// The absolute path of the root directory containing the files to be
- /// analyzed.
- final String root;
-
- /// A list of the absolute paths of files and directories within the root
- /// directory that should not be analyzed.
- final List<String> exclude;
-
- /// An informative value for the file path that the analysis options were read
- /// from. This value can be `null` if there is no analysis options file or if
- /// the location of the file has not yet been discovered.
- String? optionsFilePath;
-
- /// Initialize a newly created context root.
- ContextRoot(this.root, this.exclude, {required this.pathContext});
-
- @override
- int get hashCode => Object.hash(root, exclude);
-
- @override
- bool operator ==(Object other) {
- if (other is ContextRoot) {
- return root == other.root &&
- _listEqual(exclude, other.exclude, (String a, String b) => a == b);
- }
- return false;
- }
-
- /// Return `true` if the file with the given [filePath] is contained within
- /// this context root. A file contained in a context root if it is within the
- /// context [root] neither explicitly excluded or within one of the excluded
- /// directories.
- bool containsFile(String filePath) {
- if (!pathContext.isWithin(root, filePath)) {
- return false;
- }
- for (String excluded in exclude) {
- if (filePath == excluded || pathContext.isWithin(excluded, filePath)) {
- return false;
- }
- }
- return true;
- }
-
- /// Compare the lists [listA] and [listB], using [itemEqual] to compare list
- /// elements.
- bool _listEqual<T>(
- List<T>? listA, List<T>? listB, bool Function(T a, T b) itemEqual) {
- if (listA == null) {
- return listB == null;
- }
- if (listB == null) {
- return false;
- }
- if (listA.length != listB.length) {
- return false;
- }
- for (int i = 0; i < listA.length; i++) {
- if (!itemEqual(listA[i], listB[i])) {
- return false;
- }
- }
- return true;
- }
-}
diff --git a/pkg/analyzer/lib/src/dart/analysis/context_builder.dart b/pkg/analyzer/lib/src/dart/analysis/context_builder.dart
index db6b26d..a9c0df3 100644
--- a/pkg/analyzer/lib/src/dart/analysis/context_builder.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/context_builder.dart
@@ -95,7 +95,7 @@
updateAnalysisOptions(options);
}
- var driver = AnalysisDriver.tmp1(
+ var driver = AnalysisDriver(
scheduler: scheduler,
logger: performanceLog,
resourceProvider: resourceProvider,
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index ebc5b48..a63cff8 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -14,7 +14,6 @@
import 'package:analyzer/error/listener.dart';
import 'package:analyzer/exception/exception.dart';
import 'package:analyzer/file_system/file_system.dart';
-import 'package:analyzer/src/context/context_root.dart';
import 'package:analyzer/src/context/packages.dart';
import 'package:analyzer/src/dart/analysis/byte_store.dart';
import 'package:analyzer/src/dart/analysis/feature_set_provider.dart';
@@ -243,42 +242,7 @@
///
/// The given [SourceFactory] is cloned to ensure that it does not contain a
/// reference to a [AnalysisContext] in which it could have been used.
- @Deprecated('Use AnalysisDriver.tmp1() instead')
- factory AnalysisDriver(
- AnalysisDriverScheduler scheduler,
- PerformanceLog logger,
- ResourceProvider resourceProvider,
- ByteStore byteStore,
- // ignore: avoid_unused_constructor_parameters
- FileContentOverlay? contentOverlay,
- // ignore: avoid_unused_constructor_parameters
- ContextRoot? contextRoot,
- SourceFactory sourceFactory,
- AnalysisOptionsImpl analysisOptions, {
- Packages? packages,
- bool enableIndex = false,
- SummaryDataStore? externalSummaries,
- bool retainDataForTesting = false,
- }) {
- return AnalysisDriver.tmp1(
- scheduler: scheduler,
- logger: logger,
- resourceProvider: resourceProvider,
- byteStore: byteStore,
- sourceFactory: sourceFactory,
- analysisOptions: analysisOptions,
- packages: packages ?? Packages.empty,
- enableIndex: enableIndex,
- externalSummaries: externalSummaries,
- retainDataForTesting: retainDataForTesting,
- );
- }
-
- /// Create a new instance of [AnalysisDriver].
- ///
- /// The given [SourceFactory] is cloned to ensure that it does not contain a
- /// reference to a [AnalysisContext] in which it could have been used.
- AnalysisDriver.tmp1({
+ AnalysisDriver({
required AnalysisDriverScheduler scheduler,
required PerformanceLog logger,
required ResourceProvider resourceProvider,
@@ -309,6 +273,37 @@
_search = Search(this);
}
+ /// Create a new instance of [AnalysisDriver].
+ ///
+ /// The given [SourceFactory] is cloned to ensure that it does not contain a
+ /// reference to a [AnalysisContext] in which it could have been used.
+ @Deprecated('Use the unnamed constructor instead')
+ AnalysisDriver.tmp1({
+ required AnalysisDriverScheduler scheduler,
+ required PerformanceLog logger,
+ required ResourceProvider resourceProvider,
+ required ByteStore byteStore,
+ required SourceFactory sourceFactory,
+ required AnalysisOptionsImpl analysisOptions,
+ required Packages packages,
+ FileContentCache? fileContentCache,
+ bool enableIndex = false,
+ SummaryDataStore? externalSummaries,
+ bool retainDataForTesting = false,
+ }) : this(
+ scheduler: scheduler,
+ logger: logger,
+ resourceProvider: resourceProvider,
+ byteStore: byteStore,
+ sourceFactory: sourceFactory,
+ analysisOptions: analysisOptions,
+ packages: packages,
+ fileContentCache: fileContentCache,
+ enableIndex: enableIndex,
+ externalSummaries: externalSummaries,
+ retainDataForTesting: retainDataForTesting,
+ );
+
/// Return the set of files explicitly added to analysis using [addFile].
Set<String> get addedFiles => _fileTracker.addedFiles;
diff --git a/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart b/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
index 1fda845..9cda58d 100644
--- a/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/experiments.g.dart
@@ -8,7 +8,7 @@
/// The current version of the Dart language (or, for non-stable releases, the
/// version of the language currently in the process of being developed).
-const _currentVersion = '2.16.0';
+const _currentVersion = '2.17.0';
/// A map containing information about all known experimental flags.
final _knownFeatures = <String, ExperimentalFeature>{
diff --git a/pkg/analyzer/lib/src/dart/analysis/index.dart b/pkg/analyzer/lib/src/dart/analysis/index.dart
index 9ce7dda..8be9a88 100644
--- a/pkg/analyzer/lib/src/dart/analysis/index.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/index.dart
@@ -836,6 +836,20 @@
}
@override
+ visitSuperFormalParameter(SuperFormalParameter node) {
+ var element = node.declaredElement;
+ if (element is SuperFormalParameterElementImpl) {
+ var superParameter = element.superConstructorParameter;
+ if (superParameter != null) {
+ recordRelation(superParameter, IndexRelationKind.IS_REFERENCED_BY,
+ node.identifier, true);
+ }
+ }
+
+ return super.visitSuperFormalParameter(node);
+ }
+
+ @override
void visitWithClause(WithClause node) {
for (NamedType namedType in node.mixinTypes2) {
recordSuperType(namedType, IndexRelationKind.IS_MIXED_IN_BY);
diff --git a/pkg/analyzer/lib/src/dart/analysis/search.dart b/pkg/analyzer/lib/src/dart/analysis/search.dart
index 651e0f9..cdd7c72 100644
--- a/pkg/analyzer/lib/src/dart/analysis/search.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/search.dart
@@ -682,7 +682,9 @@
},
searchedFiles,
));
- if (parameter.isNamed || parameter.isOptionalPositional) {
+ if (parameter.isNamed ||
+ parameter.isOptionalPositional ||
+ parameter.enclosingElement is ConstructorElement) {
results.addAll(await _searchReferences(parameter, searchedFiles));
}
return results;
diff --git a/pkg/analyzer/lib/src/summary2/default_types_builder.dart b/pkg/analyzer/lib/src/summary2/default_types_builder.dart
index d565a18..d74903b 100644
--- a/pkg/analyzer/lib/src/summary2/default_types_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/default_types_builder.dart
@@ -246,7 +246,6 @@
void recurseParameters(List<TypeParameterElement> parameters) {
for (var parameter in parameters) {
var parameterNode = _linker.getLinkingNode(parameter);
- // TODO(scheglov) How to we skip already linked?
if (parameterNode is TypeParameter) {
var bound = parameterNode.bound;
if (bound != null) {
diff --git a/pkg/analyzer/lib/src/test_utilities/find_element.dart b/pkg/analyzer/lib/src/test_utilities/find_element.dart
index 8a894ec..75a6db5 100644
--- a/pkg/analyzer/lib/src/test_utilities/find_element.dart
+++ b/pkg/analyzer/lib/src/test_utilities/find_element.dart
@@ -638,6 +638,15 @@
}
extension ExecutableElementExtensions on ExecutableElement {
+ ParameterElement parameter(String name) {
+ for (var parameter in parameters) {
+ if (parameter.name == name) {
+ return parameter;
+ }
+ }
+ throw StateError('Not found: $name');
+ }
+
SuperFormalParameterElement superFormalParameter(String name) {
for (var parameter in parameters) {
if (parameter is SuperFormalParameterElement && parameter.name == name) {
diff --git a/pkg/analyzer/test/src/dart/analysis/base.dart b/pkg/analyzer/test/src/dart/analysis/base.dart
index b6c9542..4ed178b 100644
--- a/pkg/analyzer/test/src/dart/analysis/base.dart
+++ b/pkg/analyzer/test/src/dart/analysis/base.dart
@@ -57,7 +57,7 @@
'aaa': [getFolder('/aaa/lib')],
'bbb': [getFolder('/bbb/lib')],
};
- return AnalysisDriver.tmp1(
+ return AnalysisDriver(
scheduler: scheduler,
logger: logger,
resourceProvider: resourceProvider,
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
index cb4869d..1f83aec 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_test.dart
@@ -116,7 +116,7 @@
AnalysisDriver newDriver() {
var sdk = FolderBasedDartSdk(resourceProvider, sdkRoot);
- AnalysisDriver driver = AnalysisDriver.tmp1(
+ AnalysisDriver driver = AnalysisDriver(
scheduler: scheduler,
logger: logger,
resourceProvider: resourceProvider,
diff --git a/pkg/analyzer/test/src/dart/analysis/index_test.dart b/pkg/analyzer/test/src/dart/analysis/index_test.dart
index 29798f2..9375dc1 100644
--- a/pkg/analyzer/test/src/dart/analysis/index_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/index_test.dart
@@ -1115,6 +1115,32 @@
// No exceptions.
}
+ test_isReferencedBy_ParameterElement_ofConstructor_super_named() async {
+ await _indexTestUnit('''
+class A {
+ A({required int a});
+}
+class B extends A {
+ B({required super.a}); // ref
+}
+''');
+ var element = findElement.unnamedConstructor('A').parameter('a');
+ assertThat(element)..isReferencedAt('a}); // ref', true);
+ }
+
+ test_isReferencedBy_ParameterElement_ofConstructor_super_positional() async {
+ await _indexTestUnit('''
+class A {
+ A(int a);
+}
+class B extends A {
+ B(super.a); // ref
+}
+''');
+ var element = findElement.unnamedConstructor('A').parameter('a');
+ assertThat(element)..isReferencedAt('a); // ref', true);
+ }
+
test_isReferencedBy_ParameterElement_optionalNamed_ofConstructor_genericClass() async {
await _indexTestUnit('''
class A<T> {
diff --git a/pkg/analyzer/test/src/dart/analysis/search_test.dart b/pkg/analyzer/test/src/dart/analysis/search_test.dart
index 91057d0..8e54e31 100644
--- a/pkg/analyzer/test/src/dart/analysis/search_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/search_test.dart
@@ -7,6 +7,7 @@
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/src/dart/analysis/driver.dart';
import 'package:analyzer/src/dart/analysis/search.dart';
+import 'package:analyzer/src/test_utilities/find_element.dart';
import 'package:test/test.dart';
import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -1392,6 +1393,46 @@
await _verifyReferences(method, expected);
}
+ test_searchReferences_ParameterElement_ofConstructor_super_named() async {
+ await resolveTestCode('''
+class A {
+ A({required int a});
+}
+class B extends A {
+ B({required super.a}); // ref
+}
+''');
+ var element = findElement.unnamedConstructor('A').parameter('a');
+ var expected = [
+ _expectIdQ(
+ findElement.unnamedConstructor('B').superFormalParameter('a'),
+ SearchResultKind.REFERENCE,
+ 'a}); // ref',
+ ),
+ ];
+ await _verifyReferences(element, expected);
+ }
+
+ test_searchReferences_ParameterElement_ofConstructor_super_positional() async {
+ await resolveTestCode('''
+class A {
+ A(int a);
+}
+class B extends A {
+ B(super.a); // ref
+}
+''');
+ var element = findElement.unnamedConstructor('A').parameter('a');
+ var expected = [
+ _expectIdQ(
+ findElement.unnamedConstructor('B').superFormalParameter('a'),
+ SearchResultKind.REFERENCE,
+ 'a); // ref',
+ ),
+ ];
+ await _verifyReferences(element, expected);
+ }
+
test_searchReferences_ParameterElement_optionalNamed() async {
await resolveTestCode('''
foo({p}) {
diff --git a/pkg/analyzer/test/util/id_testing_helper.dart b/pkg/analyzer/test/util/id_testing_helper.dart
index 7fe6cbe..d39b7db 100644
--- a/pkg/analyzer/test/util/id_testing_helper.dart
+++ b/pkg/analyzer/test/util/id_testing_helper.dart
@@ -145,7 +145,7 @@
var byteStore = MemoryByteStore();
var analysisOptions = AnalysisOptionsImpl()
..contextFeatures = config.featureSet;
- var driver = AnalysisDriver.tmp1(
+ var driver = AnalysisDriver(
scheduler: scheduler,
logger: logger,
resourceProvider: resourceProvider,
diff --git a/pkg/dartdev/test/utils.dart b/pkg/dartdev/test/utils.dart
index 8f8147a..b45e60b 100644
--- a/pkg/dartdev/test/utils.dart
+++ b/pkg/dartdev/test/utils.dart
@@ -97,8 +97,17 @@
_process?.kill();
await _process?.exitCode;
_process = null;
- if (dir.existsSync()) {
- dir.deleteSync(recursive: true);
+ int deleteAttempts = 5;
+ while (dir.existsSync()) {
+ try {
+ dir.deleteSync(recursive: true);
+ } catch (e) {
+ if ((--deleteAttempts) <= 0) {
+ rethrow;
+ }
+ await Future.delayed(Duration(milliseconds: 500));
+ print('Got $e while deleting $dir. Trying again...');
+ }
}
}
diff --git a/pkg/dds/CHANGELOG.md b/pkg/dds/CHANGELOG.md
index 3b33fd2..03a0044 100644
--- a/pkg/dds/CHANGELOG.md
+++ b/pkg/dds/CHANGELOG.md
@@ -1,3 +1,15 @@
+# 2.1.7
+- Re-release 2.1.6+1.
+
+# 2.1.6+3
+- Roll back to 2.1.4.
+
+# 2.1.6+2
+- Roll back to 2.1.5.
+
+# 2.1.6+1
+- Fix dependencies.
+
# 2.1.6
- Improve performance of CPU sample caching.
diff --git a/pkg/dds/lib/vm_service_extensions.dart b/pkg/dds/lib/vm_service_extensions.dart
index 536fa57..7c9a031 100644
--- a/pkg/dds/lib/vm_service_extensions.dart
+++ b/pkg/dds/lib/vm_service_extensions.dart
@@ -2,275 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-import 'dart:async';
-import 'dart:collection';
+@Deprecated("Use 'package:dds_service_extensions' instead")
+library vm_service_extensions;
-import 'package:async/async.dart';
-import 'package:pedantic/pedantic.dart';
-import 'package:vm_service/src/vm_service.dart';
-
-extension DdsExtension on VmService {
- static bool _factoriesRegistered = false;
- static Version? _ddsVersion;
-
- /// The [getDartDevelopmentServiceVersion] RPC is used to determine what version of
- /// the Dart Development Service Protocol is served by a DDS instance.
- ///
- /// The result of this call is cached for subsequent invocations.
- Future<Version> getDartDevelopmentServiceVersion() async {
- if (_ddsVersion == null) {
- _ddsVersion = await _callHelper<Version>(
- 'getDartDevelopmentServiceVersion',
- );
- }
- return _ddsVersion!;
- }
-
- /// The [getCachedCpuSamples] RPC is used to retrieve a cache of CPU samples
- /// collected under a [UserTag] with name `userTag`.
- Future<CachedCpuSamples> getCachedCpuSamples(
- String isolateId, String userTag) async {
- if (!(await _versionCheck(1, 3))) {
- throw UnimplementedError('getCachedCpuSamples requires DDS version 1.3');
- }
- return _callHelper<CachedCpuSamples>('getCachedCpuSamples', args: {
- 'isolateId': isolateId,
- 'userTag': userTag,
- });
- }
-
- /// The [getAvailableCachedCpuSamples] RPC is used to determine which caches of CPU samples
- /// are available. Caches are associated with individual [UserTag] names and are specified
- /// when DDS is started via the `cachedUserTags` parameter.
- Future<AvailableCachedCpuSamples> getAvailableCachedCpuSamples() async {
- if (!(await _versionCheck(1, 3))) {
- throw UnimplementedError(
- 'getAvailableCachedCpuSamples requires DDS version 1.3',
- );
- }
- return _callHelper<AvailableCachedCpuSamples>(
- 'getAvailableCachedCpuSamples',
- );
- }
-
- /// Retrieve the event history for `stream`.
- ///
- /// If `stream` does not have event history collected, a parameter error is
- /// returned.
- Future<StreamHistory> getStreamHistory(String stream) async {
- if (!(await _versionCheck(1, 2))) {
- throw UnimplementedError('getStreamHistory requires DDS version 1.2');
- }
- return _callHelper<StreamHistory>('getStreamHistory', args: {
- 'stream': stream,
- });
- }
-
- /// Returns the stream for a given stream id which includes historical
- /// events.
- ///
- /// If `stream` does not have event history collected, a parameter error is
- /// sent over the returned [Stream].
- Stream<Event> onEventWithHistory(String stream) {
- late StreamController<Event> controller;
- late StreamQueue<Event> streamEvents;
-
- controller = StreamController<Event>(onListen: () async {
- streamEvents = StreamQueue<Event>(onEvent(stream));
- final history = (await getStreamHistory(stream)).history;
- Event? firstStreamEvent;
- unawaited(streamEvents.peek.then((e) {
- firstStreamEvent = e;
- }));
- for (final event in history) {
- if (firstStreamEvent != null &&
- event.timestamp! > firstStreamEvent!.timestamp!) {
- break;
- }
- controller.sink.add(event);
- }
- unawaited(controller.sink.addStream(streamEvents.rest));
- }, onCancel: () {
- try {
- streamEvents.cancel();
- } on StateError {
- // Underlying stream may have already been cancelled.
- }
- });
-
- return controller.stream;
- }
-
- /// Returns a new [Stream<Event>] of `Logging` events which outputs
- /// historical events before streaming real-time events.
- ///
- /// Note: unlike [onLoggingEvent], the returned stream is a single
- /// subscription stream and a new stream is created for each invocation of
- /// this getter.
- Stream<Event> get onLoggingEventWithHistory => onEventWithHistory('Logging');
-
- /// Returns a new [Stream<Event>] of `Stdout` events which outputs
- /// historical events before streaming real-time events.
- ///
- /// Note: unlike [onStdoutEvent], the returned stream is a single
- /// subscription stream and a new stream is created for each invocation of
- /// this getter.
- Stream<Event> get onStdoutEventWithHistory => onEventWithHistory('Stdout');
-
- /// Returns a new [Stream<Event>] of `Stderr` events which outputs
- /// historical events before streaming real-time events.
- ///
- /// Note: unlike [onStderrEvent], the returned stream is a single
- /// subscription stream and a new stream is created for each invocation of
- /// this getter.
- Stream<Event> get onStderrEventWithHistory => onEventWithHistory('Stderr');
-
- /// Returns a new [Stream<Event>] of `Extension` events which outputs
- /// historical events before streaming real-time events.
- ///
- /// Note: unlike [onExtensionEvent], the returned stream is a single
- /// subscription stream and a new stream is created for each invocation of
- /// this getter.
- Stream<Event> get onExtensionEventWithHistory =>
- onEventWithHistory('Extension');
-
- Future<bool> _versionCheck(int major, int minor) async {
- if (_ddsVersion == null) {
- _ddsVersion = await getDartDevelopmentServiceVersion();
- }
- return ((_ddsVersion!.major == major && _ddsVersion!.minor! >= minor) ||
- (_ddsVersion!.major! > major));
- }
-
- Future<T> _callHelper<T>(String method,
- {String? isolateId, Map args = const {}}) {
- if (!_factoriesRegistered) {
- _registerFactories();
- }
- return callMethod(
- method,
- args: {
- if (isolateId != null) 'isolateId': isolateId,
- ...args,
- },
- ).then((e) => e as T);
- }
-
- static void _registerFactories() {
- addTypeFactory('StreamHistory', StreamHistory.parse);
- addTypeFactory(
- 'AvailableCachedCpuSamples',
- AvailableCachedCpuSamples.parse,
- );
- addTypeFactory('CachedCpuSamples', CachedCpuSamples.parse);
- _factoriesRegistered = true;
- }
-}
-
-/// A collection of historical [Event]s from some stream.
-class StreamHistory extends Response {
- static StreamHistory? parse(Map<String, dynamic>? json) =>
- json == null ? null : StreamHistory._fromJson(json);
-
- StreamHistory({required List<Event> history}) : _history = history;
-
- StreamHistory._fromJson(Map<String, dynamic> json)
- : _history = json['history']
- .map(
- (e) => Event.parse(e),
- )
- .toList()
- .cast<Event>() {
- this.json = json;
- }
-
- @override
- String get type => 'StreamHistory';
-
- /// Historical [Event]s for a stream.
- List<Event> get history => UnmodifiableListView(_history);
- final List<Event> _history;
-}
-
-/// An extension of [CpuSamples] which represents a set of cached samples,
-/// associated with a particular [UserTag] name.
-class CachedCpuSamples extends CpuSamples {
- static CachedCpuSamples? parse(Map<String, dynamic>? json) =>
- json == null ? null : CachedCpuSamples._fromJson(json);
-
- CachedCpuSamples({
- required this.userTag,
- this.truncated,
- required int? samplePeriod,
- required int? maxStackDepth,
- required int? sampleCount,
- required int? timeSpan,
- required int? timeOriginMicros,
- required int? timeExtentMicros,
- required int? pid,
- required List<ProfileFunction>? functions,
- required List<CpuSample>? samples,
- }) : super(
- samplePeriod: samplePeriod,
- maxStackDepth: maxStackDepth,
- sampleCount: sampleCount,
- timeSpan: timeSpan,
- timeOriginMicros: timeOriginMicros,
- timeExtentMicros: timeExtentMicros,
- pid: pid,
- functions: functions,
- samples: samples,
- );
-
- CachedCpuSamples._fromJson(Map<String, dynamic> json)
- : userTag = json['userTag']!,
- truncated = json['truncated'],
- super(
- samplePeriod: json['samplePeriod'] ?? -1,
- maxStackDepth: json['maxStackDepth'] ?? -1,
- sampleCount: json['sampleCount'] ?? -1,
- timeSpan: json['timeSpan'] ?? -1,
- timeOriginMicros: json['timeOriginMicros'] ?? -1,
- timeExtentMicros: json['timeExtentMicros'] ?? -1,
- pid: json['pid'] ?? -1,
- functions: List<ProfileFunction>.from(
- createServiceObject(json['functions'], const ['ProfileFunction'])
- as List? ??
- [],
- ),
- samples: List<CpuSample>.from(
- createServiceObject(json['samples'], const ['CpuSample'])
- as List? ??
- [],
- ),
- );
-
- @override
- String get type => 'CachedCpuSamples';
-
- /// The name of the [UserTag] associated with this cache of [CpuSamples].
- final String userTag;
-
- /// Provided if the CPU sample cache has filled and older samples have been
- /// dropped.
- final bool? truncated;
-}
-
-/// A collection of [UserTag] names associated with caches of CPU samples.
-class AvailableCachedCpuSamples extends Response {
- static AvailableCachedCpuSamples? parse(Map<String, dynamic>? json) =>
- json == null ? null : AvailableCachedCpuSamples._fromJson(json);
-
- AvailableCachedCpuSamples({
- required this.cacheNames,
- });
-
- AvailableCachedCpuSamples._fromJson(Map<String, dynamic> json)
- : cacheNames = List<String>.from(json['cacheNames']);
-
- @override
- String get type => 'AvailableCachedUserTagCpuSamples';
-
- /// A [List] of [UserTag] names associated with CPU sample caches.
- final List<String> cacheNames;
-}
+export 'package:dds_service_extensions/dds_service_extensions.dart';
diff --git a/pkg/dds/pubspec.yaml b/pkg/dds/pubspec.yaml
index bc3e130..92adad1 100644
--- a/pkg/dds/pubspec.yaml
+++ b/pkg/dds/pubspec.yaml
@@ -3,7 +3,7 @@
A library used to spawn the Dart Developer Service, used to communicate with
a Dart VM Service instance.
-version: 2.1.6
+version: 2.1.7
homepage: https://github.com/dart-lang/sdk/tree/master/pkg/dds
@@ -13,6 +13,7 @@
dependencies:
async: ^2.4.1
collection: ^1.15.0
+ dds_service_extensions: ^1.3.0
devtools_shared: ^2.3.0
json_rpc_2: ^3.0.0
meta: ^1.1.8
@@ -24,7 +25,7 @@
shelf_web_socket: ^1.0.0
sse: ^4.0.0
stream_channel: ^2.0.0
- vm_service: ^7.5.0
+ vm_service: ^8.1.0
web_socket_channel: ^2.0.0
dev_dependencies:
diff --git a/pkg/dds/test/get_cached_cpu_samples_test.dart b/pkg/dds/test/get_cached_cpu_samples_test.dart
index ae25095..57ce1bc 100644
--- a/pkg/dds/test/get_cached_cpu_samples_test.dart
+++ b/pkg/dds/test/get_cached_cpu_samples_test.dart
@@ -7,7 +7,7 @@
import 'package:dds/dds.dart';
import 'package:dds/src/utils/mutex.dart';
-import 'package:dds/vm_service_extensions.dart';
+import 'package:dds_service_extensions/dds_service_extensions.dart';
import 'package:test/test.dart';
import 'package:vm_service/vm_service.dart';
import 'package:vm_service/vm_service_io.dart';
diff --git a/pkg/dds/test/get_stream_history_test.dart b/pkg/dds/test/get_stream_history_test.dart
index 101ae0c..efdaf2e 100644
--- a/pkg/dds/test/get_stream_history_test.dart
+++ b/pkg/dds/test/get_stream_history_test.dart
@@ -5,7 +5,7 @@
import 'dart:io';
import 'package:dds/dds.dart';
-import 'package:dds/vm_service_extensions.dart';
+import 'package:dds_service_extensions/dds_service_extensions.dart';
import 'package:test/test.dart';
import 'package:vm_service/vm_service_io.dart';
import 'common/test_helper.dart';
diff --git a/pkg/dds/test/on_event_with_history_test.dart b/pkg/dds/test/on_event_with_history_test.dart
index 01d2fd3..5365b03 100644
--- a/pkg/dds/test/on_event_with_history_test.dart
+++ b/pkg/dds/test/on_event_with_history_test.dart
@@ -6,7 +6,7 @@
import 'dart:io';
import 'package:dds/dds.dart';
-import 'package:dds/vm_service_extensions.dart';
+import 'package:dds_service_extensions/dds_service_extensions.dart';
import 'package:test/test.dart';
import 'package:vm_service/vm_service_io.dart';
import 'common/test_helper.dart';
diff --git a/pkg/dds/test/regress_devtools_issue_3302_test.dart b/pkg/dds/test/regress_devtools_issue_3302_test.dart
index 8c97a12..4d9c458 100644
--- a/pkg/dds/test/regress_devtools_issue_3302_test.dart
+++ b/pkg/dds/test/regress_devtools_issue_3302_test.dart
@@ -6,7 +6,7 @@
import 'dart:io';
import 'package:dds/dds.dart';
-import 'package:dds/vm_service_extensions.dart';
+import 'package:dds_service_extensions/dds_service_extensions.dart';
import 'package:test/test.dart';
import 'package:vm_service/vm_service_io.dart';
import 'common/test_helper.dart';
diff --git a/pkg/dds_service_extensions/.gitignore b/pkg/dds_service_extensions/.gitignore
new file mode 100644
index 0000000..65c34dc
--- /dev/null
+++ b/pkg/dds_service_extensions/.gitignore
@@ -0,0 +1,10 @@
+# Files and directories created by pub.
+.dart_tool/
+.packages
+
+# Conventional directory for build outputs.
+build/
+
+# Omit committing pubspec.lock for library packages; see
+# https://dart.dev/guides/libraries/private-files#pubspeclock.
+pubspec.lock
diff --git a/pkg/dds_service_extensions/CHANGELOG.md b/pkg/dds_service_extensions/CHANGELOG.md
new file mode 100644
index 0000000..0290ebf
--- /dev/null
+++ b/pkg/dds_service_extensions/CHANGELOG.md
@@ -0,0 +1,3 @@
+## 1.3.0
+
+- Moved `package:dds/vm_service_extensions.dart` into a standalone package.
diff --git a/pkg/dds_service_extensions/README.md b/pkg/dds_service_extensions/README.md
new file mode 100644
index 0000000..9f50e4f
--- /dev/null
+++ b/pkg/dds_service_extensions/README.md
@@ -0,0 +1,3 @@
+A package used to expand the `package:vm_service` interface with support for RPCs added in the [Dart Developer Service (DDS) protocol][dds-protocol].
+
+[dds-protocol]: https://github.com/dart-lang/sdk/blob/main/pkg/dds/dds_protocol.md
diff --git a/pkg/dds_service_extensions/analysis_options.yaml b/pkg/dds_service_extensions/analysis_options.yaml
new file mode 100644
index 0000000..dee8927
--- /dev/null
+++ b/pkg/dds_service_extensions/analysis_options.yaml
@@ -0,0 +1,30 @@
+# This file configures the static analysis results for your project (errors,
+# warnings, and lints).
+#
+# This enables the 'recommended' set of lints from `package:lints`.
+# This set helps identify many issues that may lead to problems when running
+# or consuming Dart code, and enforces writing Dart using a single, idiomatic
+# style and format.
+#
+# If you want a smaller set of lints you can change this to specify
+# 'package:lints/core.yaml'. These are just the most critical lints
+# (the recommended set includes the core lints).
+# The core lints are also what is used by pub.dev for scoring packages.
+
+include: package:lints/recommended.yaml
+
+# Uncomment the following section to specify additional rules.
+
+# linter:
+# rules:
+# - camel_case_types
+
+# analyzer:
+# exclude:
+# - path/to/excluded/files/**
+
+# For more information about the core and recommended set of lints, see
+# https://dart.dev/go/core-lints
+
+# For additional information about configuring this file, see
+# https://dart.dev/guides/language/analysis-options
diff --git a/pkg/dds_service_extensions/lib/dds_service_extensions.dart b/pkg/dds_service_extensions/lib/dds_service_extensions.dart
new file mode 100644
index 0000000..702cf58
--- /dev/null
+++ b/pkg/dds_service_extensions/lib/dds_service_extensions.dart
@@ -0,0 +1,272 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+import 'dart:collection';
+
+import 'package:async/async.dart';
+// ignore: implementation_imports
+import 'package:vm_service/src/vm_service.dart';
+
+extension DdsExtension on VmService {
+ static bool _factoriesRegistered = false;
+ static Version? _ddsVersion;
+
+ /// The [getDartDevelopmentServiceVersion] RPC is used to determine what version of
+ /// the Dart Development Service Protocol is served by a DDS instance.
+ ///
+ /// The result of this call is cached for subsequent invocations.
+ Future<Version> getDartDevelopmentServiceVersion() async {
+ _ddsVersion ??= await _callHelper<Version>(
+ 'getDartDevelopmentServiceVersion',
+ );
+ return _ddsVersion!;
+ }
+
+ /// The [getCachedCpuSamples] RPC is used to retrieve a cache of CPU samples
+ /// collected under a [UserTag] with name `userTag`.
+ Future<CachedCpuSamples> getCachedCpuSamples(
+ String isolateId, String userTag) async {
+ if (!(await _versionCheck(1, 3))) {
+ throw UnimplementedError('getCachedCpuSamples requires DDS version 1.3');
+ }
+ return _callHelper<CachedCpuSamples>('getCachedCpuSamples', args: {
+ 'isolateId': isolateId,
+ 'userTag': userTag,
+ });
+ }
+
+ /// The [getAvailableCachedCpuSamples] RPC is used to determine which caches of CPU samples
+ /// are available. Caches are associated with individual [UserTag] names and are specified
+ /// when DDS is started via the `cachedUserTags` parameter.
+ Future<AvailableCachedCpuSamples> getAvailableCachedCpuSamples() async {
+ if (!(await _versionCheck(1, 3))) {
+ throw UnimplementedError(
+ 'getAvailableCachedCpuSamples requires DDS version 1.3',
+ );
+ }
+ return _callHelper<AvailableCachedCpuSamples>(
+ 'getAvailableCachedCpuSamples',
+ );
+ }
+
+ /// Retrieve the event history for `stream`.
+ ///
+ /// If `stream` does not have event history collected, a parameter error is
+ /// returned.
+ Future<StreamHistory> getStreamHistory(String stream) async {
+ if (!(await _versionCheck(1, 2))) {
+ throw UnimplementedError('getStreamHistory requires DDS version 1.2');
+ }
+ return _callHelper<StreamHistory>('getStreamHistory', args: {
+ 'stream': stream,
+ });
+ }
+
+ /// Returns the stream for a given stream id which includes historical
+ /// events.
+ ///
+ /// If `stream` does not have event history collected, a parameter error is
+ /// sent over the returned [Stream].
+ Stream<Event> onEventWithHistory(String stream) {
+ late StreamController<Event> controller;
+ late StreamQueue<Event> streamEvents;
+
+ controller = StreamController<Event>(onListen: () async {
+ streamEvents = StreamQueue<Event>(onEvent(stream));
+ final history = (await getStreamHistory(stream)).history;
+ Event? firstStreamEvent;
+ unawaited(streamEvents.peek.then((e) {
+ firstStreamEvent = e;
+ }));
+ for (final event in history) {
+ if (firstStreamEvent != null &&
+ event.timestamp! > firstStreamEvent!.timestamp!) {
+ break;
+ }
+ controller.sink.add(event);
+ }
+ unawaited(controller.sink.addStream(streamEvents.rest));
+ }, onCancel: () {
+ try {
+ streamEvents.cancel();
+ } on StateError {
+ // Underlying stream may have already been cancelled.
+ }
+ });
+
+ return controller.stream;
+ }
+
+ /// Returns a new [Stream<Event>] of `Logging` events which outputs
+ /// historical events before streaming real-time events.
+ ///
+ /// Note: unlike [onLoggingEvent], the returned stream is a single
+ /// subscription stream and a new stream is created for each invocation of
+ /// this getter.
+ Stream<Event> get onLoggingEventWithHistory => onEventWithHistory('Logging');
+
+ /// Returns a new [Stream<Event>] of `Stdout` events which outputs
+ /// historical events before streaming real-time events.
+ ///
+ /// Note: unlike [onStdoutEvent], the returned stream is a single
+ /// subscription stream and a new stream is created for each invocation of
+ /// this getter.
+ Stream<Event> get onStdoutEventWithHistory => onEventWithHistory('Stdout');
+
+ /// Returns a new [Stream<Event>] of `Stderr` events which outputs
+ /// historical events before streaming real-time events.
+ ///
+ /// Note: unlike [onStderrEvent], the returned stream is a single
+ /// subscription stream and a new stream is created for each invocation of
+ /// this getter.
+ Stream<Event> get onStderrEventWithHistory => onEventWithHistory('Stderr');
+
+ /// Returns a new [Stream<Event>] of `Extension` events which outputs
+ /// historical events before streaming real-time events.
+ ///
+ /// Note: unlike [onExtensionEvent], the returned stream is a single
+ /// subscription stream and a new stream is created for each invocation of
+ /// this getter.
+ Stream<Event> get onExtensionEventWithHistory =>
+ onEventWithHistory('Extension');
+
+ Future<bool> _versionCheck(int major, int minor) async {
+ _ddsVersion ??= await getDartDevelopmentServiceVersion();
+ return ((_ddsVersion!.major == major && _ddsVersion!.minor! >= minor) ||
+ (_ddsVersion!.major! > major));
+ }
+
+ Future<T> _callHelper<T>(String method,
+ {String? isolateId, Map args = const {}}) {
+ if (!_factoriesRegistered) {
+ _registerFactories();
+ }
+ return callMethod(
+ method,
+ args: {
+ if (isolateId != null) 'isolateId': isolateId,
+ ...args,
+ },
+ ).then((e) => e as T);
+ }
+
+ static void _registerFactories() {
+ addTypeFactory('StreamHistory', StreamHistory.parse);
+ addTypeFactory(
+ 'AvailableCachedCpuSamples',
+ AvailableCachedCpuSamples.parse,
+ );
+ addTypeFactory('CachedCpuSamples', CachedCpuSamples.parse);
+ _factoriesRegistered = true;
+ }
+}
+
+/// A collection of historical [Event]s from some stream.
+class StreamHistory extends Response {
+ static StreamHistory? parse(Map<String, dynamic>? json) =>
+ json == null ? null : StreamHistory._fromJson(json);
+
+ StreamHistory({required List<Event> history}) : _history = history;
+
+ StreamHistory._fromJson(Map<String, dynamic> json)
+ : _history = json['history']
+ .map(
+ (e) => Event.parse(e),
+ )
+ .toList()
+ .cast<Event>() {
+ this.json = json;
+ }
+
+ @override
+ String get type => 'StreamHistory';
+
+ /// Historical [Event]s for a stream.
+ List<Event> get history => UnmodifiableListView(_history);
+ final List<Event> _history;
+}
+
+/// An extension of [CpuSamples] which represents a set of cached samples,
+/// associated with a particular [UserTag] name.
+class CachedCpuSamples extends CpuSamples {
+ static CachedCpuSamples? parse(Map<String, dynamic>? json) =>
+ json == null ? null : CachedCpuSamples._fromJson(json);
+
+ CachedCpuSamples({
+ required this.userTag,
+ this.truncated,
+ required int? samplePeriod,
+ required int? maxStackDepth,
+ required int? sampleCount,
+ required int? timeSpan,
+ required int? timeOriginMicros,
+ required int? timeExtentMicros,
+ required int? pid,
+ required List<ProfileFunction>? functions,
+ required List<CpuSample>? samples,
+ }) : super(
+ samplePeriod: samplePeriod,
+ maxStackDepth: maxStackDepth,
+ sampleCount: sampleCount,
+ timeSpan: timeSpan,
+ timeOriginMicros: timeOriginMicros,
+ timeExtentMicros: timeExtentMicros,
+ pid: pid,
+ functions: functions,
+ samples: samples,
+ );
+
+ CachedCpuSamples._fromJson(Map<String, dynamic> json)
+ : userTag = json['userTag']!,
+ truncated = json['truncated'],
+ super(
+ samplePeriod: json['samplePeriod'] ?? -1,
+ maxStackDepth: json['maxStackDepth'] ?? -1,
+ sampleCount: json['sampleCount'] ?? -1,
+ timeSpan: json['timeSpan'] ?? -1,
+ timeOriginMicros: json['timeOriginMicros'] ?? -1,
+ timeExtentMicros: json['timeExtentMicros'] ?? -1,
+ pid: json['pid'] ?? -1,
+ functions: List<ProfileFunction>.from(
+ createServiceObject(json['functions'], const ['ProfileFunction'])
+ as List? ??
+ [],
+ ),
+ samples: List<CpuSample>.from(
+ createServiceObject(json['samples'], const ['CpuSample'])
+ as List? ??
+ [],
+ ),
+ );
+
+ @override
+ String get type => 'CachedCpuSamples';
+
+ /// The name of the [UserTag] associated with this cache of [CpuSamples].
+ final String userTag;
+
+ /// Provided if the CPU sample cache has filled and older samples have been
+ /// dropped.
+ final bool? truncated;
+}
+
+/// A collection of [UserTag] names associated with caches of CPU samples.
+class AvailableCachedCpuSamples extends Response {
+ static AvailableCachedCpuSamples? parse(Map<String, dynamic>? json) =>
+ json == null ? null : AvailableCachedCpuSamples._fromJson(json);
+
+ AvailableCachedCpuSamples({
+ required this.cacheNames,
+ });
+
+ AvailableCachedCpuSamples._fromJson(Map<String, dynamic> json)
+ : cacheNames = List<String>.from(json['cacheNames']);
+
+ @override
+ String get type => 'AvailableCachedUserTagCpuSamples';
+
+ /// A [List] of [UserTag] names associated with CPU sample caches.
+ final List<String> cacheNames;
+}
diff --git a/pkg/dds_service_extensions/lib/src/dds_service_extensions_base.dart b/pkg/dds_service_extensions/lib/src/dds_service_extensions_base.dart
new file mode 100644
index 0000000..e8a6f15
--- /dev/null
+++ b/pkg/dds_service_extensions/lib/src/dds_service_extensions_base.dart
@@ -0,0 +1,6 @@
+// TODO: Put public facing types in this file.
+
+/// Checks if you are awesome. Spoiler: you are.
+class Awesome {
+ bool get isAwesome => true;
+}
diff --git a/pkg/dds_service_extensions/pubspec.yaml b/pkg/dds_service_extensions/pubspec.yaml
new file mode 100644
index 0000000..ca19fe2
--- /dev/null
+++ b/pkg/dds_service_extensions/pubspec.yaml
@@ -0,0 +1,18 @@
+name: dds_service_extensions
+description: >-
+ Extension methods for `package:vm_service`, used to make requests a
+ Dart Development Service (DDS) instance.
+
+version: 1.3.0
+
+homepage: https://github.com/dart-lang/sdk/tree/master/pkg/dds_service_extensions
+
+environment:
+ sdk: '>=2.13.0 <3.0.0'
+
+dependencies:
+ async: ^2.4.1
+ vm_service: ^8.1.0
+
+dev_dependencies:
+ lints: ^1.0.0
diff --git a/pkg/dds_service_extensions/test/README b/pkg/dds_service_extensions/test/README
new file mode 100644
index 0000000..77e2983
--- /dev/null
+++ b/pkg/dds_service_extensions/test/README
@@ -0,0 +1 @@
+NOTE: Tests for this package can be found in `package:dds`.
diff --git a/pkg/dev_compiler/lib/src/kernel/asset_file_system.dart b/pkg/dev_compiler/lib/src/kernel/asset_file_system.dart
index a293c28..b2647e0 100644
--- a/pkg/dev_compiler/lib/src/kernel/asset_file_system.dart
+++ b/pkg/dev_compiler/lib/src/kernel/asset_file_system.dart
@@ -2,8 +2,6 @@
// 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 'dart:async';
import 'dart:convert';
import 'dart:io';
@@ -43,7 +41,7 @@
}
void close() {
- client?.close(force: true);
+ client.close(force: true);
}
}
diff --git a/pkg/dev_compiler/lib/src/kernel/retry_timeout_client.dart b/pkg/dev_compiler/lib/src/kernel/retry_timeout_client.dart
index ce67906..3adfae3 100644
--- a/pkg/dev_compiler/lib/src/kernel/retry_timeout_client.dart
+++ b/pkg/dev_compiler/lib/src/kernel/retry_timeout_client.dart
@@ -2,8 +2,6 @@
// 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 'dart:async';
import 'dart:io';
import 'dart:math';
@@ -30,10 +28,10 @@
final Duration Function(int) _connectionTimeout;
/// The callback that determines when to cancel a request.
- final Duration Function(int) _reponseTimeout;
+ final Duration Function(int) _responseTimeout;
/// The callback to call to indicate that a request is being retried.
- final void Function(Uri, HttpClientResponse, int) _onRetry;
+ final void Function(Uri, HttpClientResponse?, int)? _onRetry;
/// Creates a client wrapping [_inner] that retries HTTP requests.
RetryTimeoutClient(
@@ -44,13 +42,13 @@
Duration Function(int retryCount) delay = _defaultDelay,
Duration Function(int retryCount) connectionTimeout = _defaultTimeout,
Duration Function(int retryCount) responseTimeout = _defaultTimeout,
- void Function(Uri, HttpClientResponse, int retryCount) onRetry,
+ void Function(Uri, HttpClientResponse?, int retryCount)? onRetry,
}) : _retries = retries,
_when = when,
_whenError = whenError,
_delay = delay,
_connectionTimeout = connectionTimeout,
- _reponseTimeout = responseTimeout,
+ _responseTimeout = responseTimeout,
_onRetry = onRetry {
RangeError.checkNotNegative(_retries, 'retries');
}
@@ -67,13 +65,14 @@
Uri url, Future<HttpClientRequest> Function(Uri) method) async {
var i = 0;
for (;;) {
- HttpClientResponse response;
+ HttpClientResponse? response;
try {
_inner.connectionTimeout = _connectionTimeout(i);
var request = await method(url).timeout(
- _reponseTimeout(i),
- onTimeout: () =>
- throw TimeoutException('$url, retry:$i', _reponseTimeout(i)),
+ _responseTimeout(i),
+ onTimeout: (() =>
+ throw TimeoutException('$url, retry:$i', _responseTimeout(i))
+ as FutureOr<HttpClientRequest> Function()),
);
response = await request.close();
} catch (error, stackTrace) {
diff --git a/pkg/dev_compiler/test/expression_compiler/asset_file_system_test.dart b/pkg/dev_compiler/test/expression_compiler/asset_file_system_test.dart
index 77b6904..b0e10c1 100644
--- a/pkg/dev_compiler/test/expression_compiler/asset_file_system_test.dart
+++ b/pkg/dev_compiler/test/expression_compiler/asset_file_system_test.dart
@@ -2,8 +2,6 @@
// 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 'dart:async';
import 'dart:convert';
import 'dart:io' show HttpServer;
@@ -96,8 +94,8 @@
}
void main() async {
- HttpServer server;
- AssetFileSystem fileSystem;
+ late HttpServer server;
+ late AssetFileSystem fileSystem;
group('AssetFileSystem with a server', () {
setUpAll(() async {
var hostname = 'localhost';
diff --git a/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart b/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart
index 4dd9122..f405a77 100644
--- a/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart
+++ b/pkg/front_end/lib/src/api_prototype/experimental_flags_generated.dart
@@ -33,26 +33,26 @@
}
const Version enableAlternativeInvalidationStrategyVersion =
- const Version(2, 16);
-const Version enableConstFunctionsVersion = const Version(2, 16);
+ const Version(2, 17);
+const Version enableConstFunctionsVersion = const Version(2, 17);
const Version enableConstantUpdate2018Version = const Version(2, 0);
const Version enableConstructorTearoffsVersion = const Version(2, 15);
const Version enableControlFlowCollectionsVersion = const Version(2, 0);
-const Version enableEnhancedEnumsVersion = const Version(2, 16);
+const Version enableEnhancedEnumsVersion = const Version(2, 17);
const Version enableExtensionMethodsVersion = const Version(2, 6);
-const Version enableExtensionTypesVersion = const Version(2, 16);
+const Version enableExtensionTypesVersion = const Version(2, 17);
const Version enableGenericMetadataVersion = const Version(2, 14);
-const Version enableMacrosVersion = const Version(2, 16);
-const Version enableNamedArgumentsAnywhereVersion = const Version(2, 16);
+const Version enableMacrosVersion = const Version(2, 17);
+const Version enableNamedArgumentsAnywhereVersion = const Version(2, 17);
const Version enableNonNullableVersion = const Version(2, 12);
const Version enableNonfunctionTypeAliasesVersion = const Version(2, 13);
const Version enableSetLiteralsVersion = const Version(2, 0);
const Version enableSpreadCollectionsVersion = const Version(2, 0);
-const Version enableSuperParametersVersion = const Version(2, 16);
-const Version enableTestExperimentVersion = const Version(2, 16);
+const Version enableSuperParametersVersion = const Version(2, 17);
+const Version enableTestExperimentVersion = const Version(2, 17);
const Version enableTripleShiftVersion = const Version(2, 14);
-const Version enableValueClassVersion = const Version(2, 16);
-const Version enableVarianceVersion = const Version(2, 16);
+const Version enableValueClassVersion = const Version(2, 17);
+const Version enableVarianceVersion = const Version(2, 17);
ExperimentalFlag? parseExperimentalFlag(String flag) {
switch (flag) {
@@ -147,49 +147,49 @@
};
const Map<ExperimentalFlag, Version> experimentEnabledVersion = {
- ExperimentalFlag.alternativeInvalidationStrategy: const Version(2, 16),
- ExperimentalFlag.constFunctions: const Version(2, 16),
+ ExperimentalFlag.alternativeInvalidationStrategy: const Version(2, 17),
+ ExperimentalFlag.constFunctions: const Version(2, 17),
ExperimentalFlag.constantUpdate2018: const Version(2, 0),
ExperimentalFlag.constructorTearoffs: const Version(2, 15),
ExperimentalFlag.controlFlowCollections: const Version(2, 0),
- ExperimentalFlag.enhancedEnums: const Version(2, 16),
+ ExperimentalFlag.enhancedEnums: const Version(2, 17),
ExperimentalFlag.extensionMethods: const Version(2, 6),
- ExperimentalFlag.extensionTypes: const Version(2, 16),
+ ExperimentalFlag.extensionTypes: const Version(2, 17),
ExperimentalFlag.genericMetadata: const Version(2, 14),
- ExperimentalFlag.macros: const Version(2, 16),
- ExperimentalFlag.namedArgumentsAnywhere: const Version(2, 16),
+ ExperimentalFlag.macros: const Version(2, 17),
+ ExperimentalFlag.namedArgumentsAnywhere: const Version(2, 17),
ExperimentalFlag.nonNullable: const Version(2, 12),
ExperimentalFlag.nonfunctionTypeAliases: const Version(2, 13),
ExperimentalFlag.setLiterals: const Version(2, 0),
ExperimentalFlag.spreadCollections: const Version(2, 0),
- ExperimentalFlag.superParameters: const Version(2, 16),
- ExperimentalFlag.testExperiment: const Version(2, 16),
+ ExperimentalFlag.superParameters: const Version(2, 17),
+ ExperimentalFlag.testExperiment: const Version(2, 17),
ExperimentalFlag.tripleShift: const Version(2, 14),
- ExperimentalFlag.valueClass: const Version(2, 16),
- ExperimentalFlag.variance: const Version(2, 16),
+ ExperimentalFlag.valueClass: const Version(2, 17),
+ ExperimentalFlag.variance: const Version(2, 17),
};
const Map<ExperimentalFlag, Version> experimentReleasedVersion = {
- ExperimentalFlag.alternativeInvalidationStrategy: const Version(2, 16),
- ExperimentalFlag.constFunctions: const Version(2, 16),
+ ExperimentalFlag.alternativeInvalidationStrategy: const Version(2, 17),
+ ExperimentalFlag.constFunctions: const Version(2, 17),
ExperimentalFlag.constantUpdate2018: const Version(2, 0),
ExperimentalFlag.constructorTearoffs: const Version(2, 15),
ExperimentalFlag.controlFlowCollections: const Version(2, 0),
- ExperimentalFlag.enhancedEnums: const Version(2, 16),
+ ExperimentalFlag.enhancedEnums: const Version(2, 17),
ExperimentalFlag.extensionMethods: const Version(2, 6),
- ExperimentalFlag.extensionTypes: const Version(2, 16),
+ ExperimentalFlag.extensionTypes: const Version(2, 17),
ExperimentalFlag.genericMetadata: const Version(2, 14),
- ExperimentalFlag.macros: const Version(2, 16),
- ExperimentalFlag.namedArgumentsAnywhere: const Version(2, 16),
+ ExperimentalFlag.macros: const Version(2, 17),
+ ExperimentalFlag.namedArgumentsAnywhere: const Version(2, 17),
ExperimentalFlag.nonNullable: const Version(2, 10),
ExperimentalFlag.nonfunctionTypeAliases: const Version(2, 13),
ExperimentalFlag.setLiterals: const Version(2, 0),
ExperimentalFlag.spreadCollections: const Version(2, 0),
- ExperimentalFlag.superParameters: const Version(2, 16),
- ExperimentalFlag.testExperiment: const Version(2, 16),
+ ExperimentalFlag.superParameters: const Version(2, 17),
+ ExperimentalFlag.testExperiment: const Version(2, 17),
ExperimentalFlag.tripleShift: const Version(2, 14),
- ExperimentalFlag.valueClass: const Version(2, 16),
- ExperimentalFlag.variance: const Version(2, 16),
+ ExperimentalFlag.valueClass: const Version(2, 17),
+ ExperimentalFlag.variance: const Version(2, 17),
};
const AllowedExperimentalFlags defaultAllowedExperimentalFlags =
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index ed6468b..887ed4c 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -5347,10 +5347,6 @@
}
}
if (type is ClassBuilder) {
- if (type is SourceEnumBuilder) {
- return buildProblem(fasta.messageEnumInstantiation,
- nameToken.charOffset, nameToken.length);
- }
MemberBuilder? b =
type.findConstructorOrFactory(name, charOffset, uri, libraryBuilder);
Member? target;
@@ -5372,6 +5368,13 @@
} else {
target = b.member;
}
+ if (type is SourceEnumBuilder &&
+ !(libraryBuilder.enableEnhancedEnumsInLibrary &&
+ target is Procedure &&
+ target.kind == ProcedureKind.Factory)) {
+ return buildProblem(fasta.messageEnumInstantiation,
+ nameToken.charOffset, nameToken.length);
+ }
if (target is Constructor ||
(target is Procedure && target.kind == ProcedureKind.Factory)) {
Expression invocation;
diff --git a/pkg/front_end/lib/src/fasta/kernel/hierarchy/hierarchy_node.dart b/pkg/front_end/lib/src/fasta/kernel/hierarchy/hierarchy_node.dart
index a5e89b9..30bd373 100644
--- a/pkg/front_end/lib/src/fasta/kernel/hierarchy/hierarchy_node.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/hierarchy/hierarchy_node.dart
@@ -48,9 +48,7 @@
}
List<Supertype> superclasses;
-
- List<Supertype> interfaces;
-
+ List<Supertype> interfacesList;
int maxInheritancePath;
List<TypeBuilder>? directInterfaceBuilders;
@@ -62,7 +60,7 @@
if (supernode == null) {
// This should be Object.
superclasses = new List<Supertype>.filled(0, dummySupertype);
- interfaces = new List<Supertype>.filled(0, dummySupertype);
+ interfacesList = new List<Supertype>.filled(0, dummySupertype);
maxInheritancePath = 0;
} else {
maxInheritancePath = supernode.maxInheritancePath + 1;
@@ -107,7 +105,7 @@
}
if (directInterfaceBuilders != null) {
- interfaces = <Supertype>[];
+ Map<Class, Supertype> interfaces = {};
// ignore: unnecessary_null_comparison
if (superclassInterfaces != null) {
for (int i = 0; i < superclassInterfaces.length; i++) {
@@ -145,16 +143,18 @@
}
}
}
+ interfacesList = interfaces.values.toList();
// ignore: unnecessary_null_comparison
} else if (superclassInterfaces != null &&
!classBuilder.library.isNonNullableByDefault &&
supernode.classBuilder.library.isNonNullableByDefault) {
- interfaces = <Supertype>[];
+ Map<Class, Supertype> interfaces = {};
for (int i = 0; i < superclassInterfaces.length; i++) {
addInterface(interfaces, superclasses, superclassInterfaces[i]);
}
+ interfacesList = interfaces.values.toList();
} else {
- interfaces = superclassInterfaces;
+ interfacesList = superclassInterfaces;
}
}
@@ -162,30 +162,19 @@
recordSupertype(superclass);
}
// ignore: unnecessary_null_comparison
- if (interfaces != null) {
- for (Supertype superinterface in interfaces) {
+ if (interfacesList != null) {
+ for (Supertype superinterface in interfacesList) {
recordSupertype(superinterface);
}
}
- /*ClassHierarchyMemberNode memberNode =
- buildMemberNode(supernode, directInterfaceBuilders);*/
-
return new ClassHierarchyNode(
- classBuilder,
- supernode,
- directInterfaceBuilders,
- /*classMemberMap,
- classSetterMap,
- interfaceMemberMap,
- interfaceSetterMap,*/
- superclasses,
- interfaces,
- maxInheritancePath,
- /*hasNoSuchMethod,
- dataForTesting,*/
- /*memberNode*/
- );
+ classBuilder,
+ supernode,
+ directInterfaceBuilders,
+ superclasses,
+ interfacesList,
+ maxInheritancePath);
}
Supertype recordSupertype(Supertype supertype) {
@@ -242,8 +231,8 @@
return result ?? supertypes;
}
- void addInterface(List<Supertype> interfaces, List<Supertype> superclasses,
- Supertype type) {
+ void addInterface(Map<Class, Supertype> interfaces,
+ List<Supertype> superclasses, Supertype type) {
// ignore: unnecessary_null_comparison
if (type == null) return null;
if (!classBuilder.library.isNonNullableByDefault) {
@@ -273,31 +262,26 @@
}
return;
} else {
- for (int i = 0; i < interfaces.length; i++) {
- // This is a quadratic algorithm, but normally, the number of
- // interfaces is really small.
- Supertype? interface = interfaces[i];
- if (interface.classNode == type.classNode) {
- // This is a potential conflict.
- if (classBuilder.library.isNonNullableByDefault) {
- interface = nnbdTopMergeSupertype(
- hierarchy.coreTypes,
- normSupertype(hierarchy.coreTypes, interface),
- normSupertype(hierarchy.coreTypes, type));
- if (interface == null) {
- // This is a conflict.
- // TODO(johnniwinther): Report errors here instead of through
- // the computation of the [ClassHierarchy].
- interface = interfaces[i];
- } else {
- interfaces[i] = interface;
- }
+ Supertype? interface = interfaces[type.classNode];
+ if (interface != null) {
+ // This is a potential conflict.
+ if (classBuilder.library.isNonNullableByDefault) {
+ interface = nnbdTopMergeSupertype(
+ hierarchy.coreTypes,
+ normSupertype(hierarchy.coreTypes, interface),
+ normSupertype(hierarchy.coreTypes, type));
+ if (interface == null) {
+ // This is a conflict.
+ // TODO(johnniwinther): Report errors here instead of through
+ // the computation of the [ClassHierarchy].
+ } else {
+ interfaces[type.classNode] = interface;
}
- return;
}
+ return;
}
}
- interfaces.add(type);
+ interfaces[type.classNode] = type;
}
void inferMixinApplication() {
@@ -349,27 +333,6 @@
final List<TypeBuilder>? directInterfaceBuilders;
- /*/// All the members of this class including [classMembers] of its
- /// superclasses. The members are sorted by [compareDeclarations].
- final Map<Name, ClassMember> classMemberMap;
-
- /// Similar to [classMembers] but for setters.
- final Map<Name, ClassMember> classSetterMap;
-
- /// All the interface members of this class including [interfaceMembers] of
- /// its supertypes. The members are sorted by [compareDeclarations].
- ///
- /// In addition to the members of [classMembers] this also contains members
- /// from interfaces.
- ///
- /// This may be null, in which case [classMembers] is the interface members.
- final Map<Name, ClassMember>? interfaceMemberMap;
-
- /// Similar to [interfaceMembers] but for setters.
- ///
- /// This may be null, in which case [classSetters] is the interface setters.
- final Map<Name, ClassMember>? interfaceSetterMap;*/
-
/// All superclasses of [classBuilder] excluding itself. The classes are
/// sorted by depth from the root (Object) in ascending order.
final List<Supertype> superclasses;
@@ -383,27 +346,13 @@
int get depth => superclasses.length;
- /*final bool hasNoSuchMethod;
-
- final ClassHierarchyNodeDataForTesting? dataForTesting;*/
-
- //final ClassHierarchyMemberNode memberNode;
-
ClassHierarchyNode(
- this.classBuilder,
- this.supernode,
- this.directInterfaceBuilders,
- /*this.classMemberMap,
- this.classSetterMap,
- this.interfaceMemberMap,
- this.interfaceSetterMap,*/
- this.superclasses,
- this.interfaces,
- this.maxInheritancePath,
- /*this.hasNoSuchMethod,
- this.dataForTesting,*/
- /*this.memberNode*/
- );
+ this.classBuilder,
+ this.supernode,
+ this.directInterfaceBuilders,
+ this.superclasses,
+ this.interfaces,
+ this.maxInheritancePath);
/// Returns a list of all supertypes of [classBuilder], including this node.
List<ClassHierarchyNode> computeAllSuperNodes(
diff --git a/pkg/front_end/lib/src/fasta/source/diet_listener.dart b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
index f24e48b..77c43b7 100644
--- a/pkg/front_end/lib/src/fasta/source/diet_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
@@ -987,37 +987,15 @@
@override
void endEnumConstructor(Token? getOrSet, Token beginToken, Token beginParam,
Token? beginInitializers, Token endToken) {
- // TODO(chloestefantsova): Call endClassConstructor instead.
- debugEvent("EnumConstructor");
- pop(); // bodyToken
- pop(); // name
- pop(); // metadata
- checkEmpty(beginToken.charOffset);
- // Skip the declaration. An error as already been produced by the parser.
- }
-
- @override
- void endEnumFactoryMethod(
- Token beginToken, Token factoryKeyword, Token endToken) {
- // TODO(chloestefantsova): Call endClassFactoryMethod instead.
- debugEvent("EnumFactoryMethod");
- pop(); // bodyToken
- pop(); // name
- pop(); // metadata
- checkEmpty(beginToken.charOffset);
- // Skip the declaration. An error as already been produced by the parser.
+ _endClassMethod(
+ getOrSet, beginToken, beginParam, beginInitializers, endToken, true);
}
@override
void endEnumMethod(Token? getOrSet, Token beginToken, Token beginParam,
Token? beginInitializers, Token endToken) {
- // TODO(chloestefantsova): Call endClassMethod instead.
- debugEvent("EnumMethod");
- pop(); // bodyToken
- pop(); // name
- pop(); // metadata
- checkEmpty(beginToken.charOffset);
- // Skip the declaration. An error as already been produced by the parser.
+ _endClassMethod(
+ getOrSet, beginToken, beginParam, beginInitializers, endToken, false);
}
@override
@@ -1031,12 +1009,8 @@
int count,
Token beginToken,
Token endToken) {
- // TODO(chloestefantsova): Call endClassFields instead.
- debugEvent("EnumFields");
- const FixedNullableList<String>().pop(stack, count); // names
- pop(); // metadata
- checkEmpty(beginToken.charOffset);
- // Skip the declaration. An error as already been produced by the parser.
+ debugEvent("Fields");
+ buildFields(count, beginToken, false);
}
@override
diff --git a/pkg/front_end/lib/src/fasta/source/outline_builder.dart b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
index 2bd2dab..820c2d5 100644
--- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
@@ -1764,6 +1764,7 @@
case _MethodKind.classMethod:
case _MethodKind.mixinMethod:
case _MethodKind.extensionMethod:
+ case _MethodKind.enumMethod:
break;
}
bool isStatic = (modifiers & staticMask) != 0;
@@ -3029,71 +3030,7 @@
@override
void endEnumFactoryMethod(
Token beginToken, Token factoryKeyword, Token endToken) {
- // TODO(cstefantsova): Call endClassFactoryMethod instead.
debugEvent("EnumFactoryMethod");
- MethodBody bodyKind = pop() as MethodBody;
- if (bodyKind == MethodBody.RedirectingFactoryBody) {
- pop(); // reference
- }
- pop(); // async marker
- pop(); // formals
- popCharOffset(); // formals char offset
- pop(); // type variables
- popCharOffset(); // char offset
- pop(); // name
- pop(); // modifiers
- pop(); // metadata
- popDeclarationContext();
- // TODO(cstefantsova): Use actual type parameters.
- libraryBuilder
- .endNestedDeclaration(
- TypeParameterScopeKind.factoryMethod, "#factory_method")
- .resolveNamedTypes([], libraryBuilder);
- // Skip the declaration. An error as already been produced by the parser.
-
- if (libraryBuilder.enableEnhancedEnumsInLibrary) {
- addProblem(messageEnumDeclaresFactory, beginToken.charOffset, -1);
- } else {
- addProblem(
- templateExperimentNotEnabled.withArguments('enhanced-enums',
- libraryBuilder.enableEnhancedEnumsVersionInLibrary.toText()),
- beginToken.charOffset,
- -1);
- }
- }
-
- @override
- void endEnumMethod(Token? getOrSet, Token beginToken, Token beginParam,
- Token? beginInitializers, Token endToken) {
- // TODO(cstefantsova): Call endClassMethod instead.
- debugEvent("EnumMethod");
- MethodBody bodyKind = pop() as MethodBody;
- if (bodyKind == MethodBody.RedirectingFactoryBody) {
- pop(); // reference
- }
- pop(); // async marker
- pop(); // formals
- popCharOffset(); // formals char offset
- pop(); // type variables
- popCharOffset(); // char offset
- pop(); // name
- pop(); // return type
- int modifiers = Modifier.toMask(pop() as List<Modifier>?);
- popCharOffset(); // final or const offset
- pop(); // metadata
- popDeclarationContext();
- TypeParameterScopeKind scopeKind;
- if ((modifiers & staticMask) != 0) {
- scopeKind = TypeParameterScopeKind.staticMethod;
- } else {
- scopeKind = TypeParameterScopeKind.instanceMethod;
- }
- // TODO(cstefantsova): Use actual type parameters.
- libraryBuilder
- .endNestedDeclaration(scopeKind, "#method")
- .resolveNamedTypes([], libraryBuilder);
- // Skip the declaration. An error as already been produced by the parser.
-
if (!libraryBuilder.enableEnhancedEnumsInLibrary) {
addProblem(
templateExperimentNotEnabled.withArguments('enhanced-enums',
@@ -3101,6 +3038,23 @@
beginToken.charOffset,
-1);
}
+
+ _endFactoryMethod(beginToken, factoryKeyword, endToken);
+ }
+
+ @override
+ void endEnumMethod(Token? getOrSet, Token beginToken, Token beginParam,
+ Token? beginInitializers, Token endToken) {
+ if (!libraryBuilder.enableEnhancedEnumsInLibrary) {
+ addProblem(
+ templateExperimentNotEnabled.withArguments('enhanced-enums',
+ libraryBuilder.enableEnhancedEnumsVersionInLibrary.toText()),
+ beginToken.charOffset,
+ -1);
+ }
+
+ _endClassMethod(getOrSet, beginToken, beginParam, beginInitializers,
+ endToken, _MethodKind.enumMethod);
}
@override
@@ -3134,10 +3088,10 @@
libraryBuilder.enableEnhancedEnumsVersionInLibrary.toText()),
beginToken.charOffset,
-1);
- } else {
- _endClassMethod(getOrSet, beginToken, beginParam, beginInitializers,
- endToken, _MethodKind.enumConstructor);
}
+
+ _endClassMethod(getOrSet, beginToken, beginParam, beginInitializers,
+ endToken, _MethodKind.enumConstructor);
}
@override
@@ -3322,4 +3276,5 @@
extensionConstructor,
extensionMethod,
enumConstructor,
+ enumMethod,
}
diff --git a/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart b/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart
index 9dc50e7..2f84424 100644
--- a/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_enum_builder.dart
@@ -409,7 +409,7 @@
new Scope(
local: members,
setters: setters,
- parent: parent.scope,
+ parent: scope.parent,
debugName: "enum $name",
isModifiable: false),
constructorScope..local.addAll(constructors),
@@ -555,11 +555,11 @@
String constructorName =
enumConstantInfo.constructorReferenceBuilder?.suffix ?? "";
- SourceConstructorBuilder? constructorBuilder =
- constructorScopeBuilder[constructorName]
- as SourceConstructorBuilder?;
+ MemberBuilder? constructorBuilder =
+ constructorScopeBuilder[constructorName];
- if (constructorBuilder == null) {
+ if (constructorBuilder == null ||
+ constructorBuilder is! SourceConstructorBuilder) {
// TODO(cstefantsova): Report an error.
} else {
Arguments arguments;
@@ -629,17 +629,11 @@
interfaceTargetReference: nameField.getterReference,
resultType: nameField.getterType),
]));
- } else {}
+ }
super.buildOutlineExpressions(library, classHierarchy,
delayedActionPerformers, synthesizedFunctionNodes);
}
-
- @override
- MemberBuilder? findConstructorOrFactory(
- String name, int charOffset, Uri uri, LibraryBuilder library) {
- return null;
- }
}
class EnumConstantInfo {
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 9aa1463..01f02a8 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
@@ -2830,7 +2830,7 @@
new Scope(
local: members,
setters: setters,
- parent: scope.withTypeVariables(<TypeVariableBuilder>[]),
+ parent: scope.withTypeVariables(typeVariables),
debugName: "enum $name",
isModifiable: false),
new ConstructorScope(name, constructors));
diff --git a/pkg/front_end/messages.status b/pkg/front_end/messages.status
index 0fed875..0c1fb2b 100644
--- a/pkg/front_end/messages.status
+++ b/pkg/front_end/messages.status
@@ -213,6 +213,8 @@
DuplicatedParameterName/example: Fail
Encoding/analyzerCode: Fail
EnumConstantSameNameAsEnclosing/example: Fail
+EnumDeclaresConstFactory/analyzerCode: Fail
+EnumDeclaresConstFactory/example: Fail
EnumDeclaresFactory/analyzerCode: Fail
EnumDeclaresFactory/example: Fail
EnumInstantiation/example: Fail
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index 9819804..77e7660 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -5455,8 +5455,8 @@
script: |
method(dynamic d) => d.new;
-EnumDeclaresFactory:
- problemMessage: "Enums can't declare factory constructors."
+EnumDeclaresConstFactory:
+ problemMessage: "Enums can't declare const factory constructors."
correctionMessage: "Try removing the factory constructor declaration."
PositionalSuperParametersAndArguments:
diff --git a/pkg/front_end/test/macros/macro_test.dart b/pkg/front_end/test/macros/macro_test.dart
index 7a4dee8..2ceca95 100644
--- a/pkg/front_end/test/macros/macro_test.dart
+++ b/pkg/front_end/test/macros/macro_test.dart
@@ -5,6 +5,7 @@
import 'dart:io' show Directory, Platform;
import 'package:_fe_analyzer_shared/src/macros/api.dart';
import 'package:_fe_analyzer_shared/src/macros/executor.dart';
+import 'package:_fe_analyzer_shared/src/macros/executor_shared/serialization.dart';
import 'package:_fe_analyzer_shared/src/testing/id.dart' show ActualData, Id;
import 'package:_fe_analyzer_shared/src/testing/id_testing.dart';
import 'package:_fe_analyzer_shared/src/testing/features.dart';
@@ -292,7 +293,12 @@
}
@override
- Future<MacroClassIdentifier> loadMacro(Uri library, String name) async {
+ Future<MacroClassIdentifier> loadMacro(Uri library, String name,
+ {Uri? precompiledKernelUri}) async {
+ if (precompiledKernelUri != null) {
+ throw new UnsupportedError(
+ 'Precompiled kernel not supported for this implementation.');
+ }
_MacroClassIdentifier id = new _MacroClassIdentifier(library, name);
macroClasses.add(id);
return id;
@@ -320,6 +326,9 @@
@override
String toString() => 'MacroClassIdentifier($uri,$className)';
+
+ @override
+ void serialize(Serializer serializer) => throw UnimplementedError();
}
class _MacroInstanceIdentifier implements MacroInstanceIdentifier {
@@ -330,4 +339,7 @@
_MacroInstanceIdentifier(this.macroClass, this.constructor, this.arguments);
String toText() => '${macroClass.toText()}/${constructor}()';
+
+ @override
+ void serialize(Serializer serializer) => throw UnimplementedError();
}
diff --git a/pkg/front_end/test/spell_checking_list_code.txt b/pkg/front_end/test/spell_checking_list_code.txt
index 613e0b7..8b9b65b4 100644
--- a/pkg/front_end/test/spell_checking_list_code.txt
+++ b/pkg/front_end/test/spell_checking_list_code.txt
@@ -141,6 +141,7 @@
bof
bom
bones
+bootstrap
bother
boundness
boxed
@@ -326,6 +327,7 @@
degrades
degree
del
+delegated
delimit
delimiting
demands
@@ -420,6 +422,7 @@
engineered
enhanced
enters
+entrypoint
entrypointish
enumerates
env
@@ -436,6 +439,7 @@
eval
execute
executor
+executors
exhausted
existence
existentially
@@ -603,6 +607,7 @@
impl
impl+
implementers
+impls
imply
implying
importantly
@@ -614,6 +619,7 @@
inconsistency
increased
incremented
+incrementing
independently
indexer
indexing
@@ -668,6 +674,7 @@
is64
isolate
isolated
+isolates
issuecomment
issuing
iterables
@@ -840,6 +847,7 @@
newest
nextnext
ni
+nil
nine
nj
nk
@@ -969,6 +977,7 @@
pre
prebuild
prebuilt
+precompiled
preexisted
preexisting
premark
@@ -1226,6 +1235,7 @@
spaced
sparse
spawn
+spawned
spawns
spec
spec'ed
@@ -1483,6 +1493,7 @@
vegorov
verbosity
versa
+versus
viable
vice
video
diff --git a/pkg/front_end/test/spell_checking_list_tests.txt b/pkg/front_end/test/spell_checking_list_tests.txt
index d9f5fdf..97ef414 100644
--- a/pkg/front_end/test/spell_checking_list_tests.txt
+++ b/pkg/front_end/test/spell_checking_list_tests.txt
@@ -1060,7 +1060,6 @@
xxxxxxxxxxxx
xyz
y's
-yaml2json
year
yxxx
yy
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48084.dart b/pkg/front_end/testcases/enhanced_enums/issue48084.dart
new file mode 100644
index 0000000..433bea6
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48084.dart
@@ -0,0 +1,26 @@
+// 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.
+
+enum E {
+ one("foo"),
+ two("bar");
+
+ final String field;
+
+ const E(this.field);
+
+ @override
+ String toString() => field;
+}
+
+expectEquals(a, b) {
+ if (a != b) {
+ throw "Expected '$a' and '$b' to be equal.";
+ }
+}
+
+main() {
+ expectEquals("${E.one}", "foo");
+ expectEquals("${E.two}", "bar");
+}
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.strong.expect
new file mode 100644
index 0000000..1da7d5a
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.strong.expect
@@ -0,0 +1,45 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class E extends core::_Enum /*isEnum*/ {
+ static const field core::List<self::E> values = #C9;
+ static const field self::E one = #C4;
+ static const field self::E two = #C8;
+ final field core::String field;
+ const constructor •(core::int index, core::String name, core::String field) → self::E
+ : self::E::field = field, super core::_Enum::•(index, name)
+ ;
+ @#C10
+ method toString() → core::String
+ return this.{self::E::field}{core::String};
+}
+static method expectEquals(dynamic a, dynamic b) → dynamic {
+ if(!(a =={core::Object::==}{(core::Object) → core::bool} b)) {
+ throw "Expected '${a}' and '${b}' to be equal.";
+ }
+}
+static method main() → dynamic {
+ self::expectEquals("${#C4}", "foo");
+ self::expectEquals("${#C8}", "bar");
+}
+
+constants {
+ #C1 = "foo"
+ #C2 = 0
+ #C3 = "one"
+ #C4 = self::E {field:#C1, index:#C2, _name:#C3}
+ #C5 = "bar"
+ #C6 = 1
+ #C7 = "two"
+ #C8 = self::E {field:#C5, index:#C6, _name:#C7}
+ #C9 = <self::E>[#C4, #C8]
+ #C10 = core::_Override {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue48084.dart:
+- E. (from org-dartlang-testcase:///issue48084.dart:11:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.strong.transformed.expect
new file mode 100644
index 0000000..1da7d5a
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.strong.transformed.expect
@@ -0,0 +1,45 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class E extends core::_Enum /*isEnum*/ {
+ static const field core::List<self::E> values = #C9;
+ static const field self::E one = #C4;
+ static const field self::E two = #C8;
+ final field core::String field;
+ const constructor •(core::int index, core::String name, core::String field) → self::E
+ : self::E::field = field, super core::_Enum::•(index, name)
+ ;
+ @#C10
+ method toString() → core::String
+ return this.{self::E::field}{core::String};
+}
+static method expectEquals(dynamic a, dynamic b) → dynamic {
+ if(!(a =={core::Object::==}{(core::Object) → core::bool} b)) {
+ throw "Expected '${a}' and '${b}' to be equal.";
+ }
+}
+static method main() → dynamic {
+ self::expectEquals("${#C4}", "foo");
+ self::expectEquals("${#C8}", "bar");
+}
+
+constants {
+ #C1 = "foo"
+ #C2 = 0
+ #C3 = "one"
+ #C4 = self::E {field:#C1, index:#C2, _name:#C3}
+ #C5 = "bar"
+ #C6 = 1
+ #C7 = "two"
+ #C8 = self::E {field:#C5, index:#C6, _name:#C7}
+ #C9 = <self::E>[#C4, #C8]
+ #C10 = core::_Override {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue48084.dart:
+- E. (from org-dartlang-testcase:///issue48084.dart:11:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.textual_outline.expect
new file mode 100644
index 0000000..57d7640
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.textual_outline.expect
@@ -0,0 +1,3 @@
+enum E { one("foo"), two("bar"); final String field; const E(this.field); @override String toString() => field; }
+expectEquals(a, b) {}
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.expect
new file mode 100644
index 0000000..32c1780
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.expect
@@ -0,0 +1,45 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class E extends core::_Enum /*isEnum*/ {
+ static const field core::List<self::E> values = #C9;
+ static const field self::E one = #C4;
+ static const field self::E two = #C8;
+ final field core::String field;
+ const constructor •(core::int index, core::String name, core::String field) → self::E
+ : self::E::field = field, super core::_Enum::•(index, name)
+ ;
+ @#C10
+ method toString() → core::String
+ return this.{self::E::field}{core::String};
+}
+static method expectEquals(dynamic a, dynamic b) → dynamic {
+ if(!(a =={core::Object::==}{(core::Object) → core::bool} b)) {
+ throw "Expected '${a}' and '${b}' to be equal.";
+ }
+}
+static method main() → dynamic {
+ self::expectEquals("${#C4}", "foo");
+ self::expectEquals("${#C8}", "bar");
+}
+
+constants {
+ #C1 = "foo"
+ #C2 = 0
+ #C3 = "one"
+ #C4 = self::E {field:#C1, index:#C2, _name:#C3}
+ #C5 = "bar"
+ #C6 = 1
+ #C7 = "two"
+ #C8 = self::E {field:#C5, index:#C6, _name:#C7}
+ #C9 = <self::E*>[#C4, #C8]
+ #C10 = core::_Override {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue48084.dart:
+- E. (from org-dartlang-testcase:///issue48084.dart:11:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.modular.expect
new file mode 100644
index 0000000..32c1780
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.modular.expect
@@ -0,0 +1,45 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class E extends core::_Enum /*isEnum*/ {
+ static const field core::List<self::E> values = #C9;
+ static const field self::E one = #C4;
+ static const field self::E two = #C8;
+ final field core::String field;
+ const constructor •(core::int index, core::String name, core::String field) → self::E
+ : self::E::field = field, super core::_Enum::•(index, name)
+ ;
+ @#C10
+ method toString() → core::String
+ return this.{self::E::field}{core::String};
+}
+static method expectEquals(dynamic a, dynamic b) → dynamic {
+ if(!(a =={core::Object::==}{(core::Object) → core::bool} b)) {
+ throw "Expected '${a}' and '${b}' to be equal.";
+ }
+}
+static method main() → dynamic {
+ self::expectEquals("${#C4}", "foo");
+ self::expectEquals("${#C8}", "bar");
+}
+
+constants {
+ #C1 = "foo"
+ #C2 = 0
+ #C3 = "one"
+ #C4 = self::E {field:#C1, index:#C2, _name:#C3}
+ #C5 = "bar"
+ #C6 = 1
+ #C7 = "two"
+ #C8 = self::E {field:#C5, index:#C6, _name:#C7}
+ #C9 = <self::E*>[#C4, #C8]
+ #C10 = core::_Override {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue48084.dart:
+- E. (from org-dartlang-testcase:///issue48084.dart:11:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.outline.expect
new file mode 100644
index 0000000..1419d47
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.outline.expect
@@ -0,0 +1,28 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class E extends core::_Enum /*isEnum*/ {
+ static const field core::List<self::E> values = const <self::E>[self::E::one, self::E::two];
+ static const field self::E one = const self::E::•(0, "one", "foo");
+ static const field self::E two = const self::E::•(1, "two", "bar");
+ final field core::String field;
+ const constructor •(core::int index, core::String name, core::String field) → self::E
+ : self::E::field = field, super core::_Enum::•(index, name)
+ ;
+ @core::override
+ method toString() → core::String
+ return "E.${this.{core::_Enum::_name}{core::String}}";
+}
+static method expectEquals(dynamic a, dynamic b) → dynamic
+ ;
+static method main() → dynamic
+ ;
+
+
+Extra constant evaluation status:
+Evaluated: StaticGet @ org-dartlang-testcase:///issue48084.dart:13:4 -> InstanceConstant(const _Override{})
+Evaluated: ListLiteral @ org-dartlang-testcase:///issue48084.dart:5:6 -> ListConstant(const <E*>[const E{E.field: "foo", _Enum.index: 0, _Enum._name: "one"}, const E{E.field: "bar", _Enum.index: 1, _Enum._name: "two"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue48084.dart:6:3 -> InstanceConstant(const E{E.field: "foo", _Enum.index: 0, _Enum._name: "one"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///issue48084.dart:7:3 -> InstanceConstant(const E{E.field: "bar", _Enum.index: 1, _Enum._name: "two"})
+Extra constant evaluation: evaluated: 10, effectively constant: 4
diff --git a/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.transformed.expect
new file mode 100644
index 0000000..32c1780
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/issue48084.dart.weak.transformed.expect
@@ -0,0 +1,45 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class E extends core::_Enum /*isEnum*/ {
+ static const field core::List<self::E> values = #C9;
+ static const field self::E one = #C4;
+ static const field self::E two = #C8;
+ final field core::String field;
+ const constructor •(core::int index, core::String name, core::String field) → self::E
+ : self::E::field = field, super core::_Enum::•(index, name)
+ ;
+ @#C10
+ method toString() → core::String
+ return this.{self::E::field}{core::String};
+}
+static method expectEquals(dynamic a, dynamic b) → dynamic {
+ if(!(a =={core::Object::==}{(core::Object) → core::bool} b)) {
+ throw "Expected '${a}' and '${b}' to be equal.";
+ }
+}
+static method main() → dynamic {
+ self::expectEquals("${#C4}", "foo");
+ self::expectEquals("${#C8}", "bar");
+}
+
+constants {
+ #C1 = "foo"
+ #C2 = 0
+ #C3 = "one"
+ #C4 = self::E {field:#C1, index:#C2, _name:#C3}
+ #C5 = "bar"
+ #C6 = 1
+ #C7 = "two"
+ #C8 = self::E {field:#C5, index:#C6, _name:#C7}
+ #C9 = <self::E*>[#C4, #C8]
+ #C10 = core::_Override {}
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///issue48084.dart:
+- E. (from org-dartlang-testcase:///issue48084.dart:11:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/members.dart b/pkg/front_end/testcases/enhanced_enums/members.dart
new file mode 100644
index 0000000..a4fab29
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/members.dart
@@ -0,0 +1,41 @@
+// 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.
+
+enum E {
+ one(1),
+ two(2);
+
+ final int foo;
+ final int bar = 42;
+
+ static E staticFoo = new E.f();
+
+ const E(this.foo);
+
+ factory E.f() => E.one;
+
+ int method(int value) => value + 10;
+
+ String staticMethod(double d, bool b) => "$d$b";
+}
+
+enum E2<X> {
+ one<num>(1),
+ two("2");
+
+ final X foo;
+ final X? bar = null;
+
+ static var staticFoo = () => new E2.f();
+
+ const E2(this.foo);
+
+ factory E2.f() => throw 42;
+
+ int method(int value) => value + 10;
+
+ String staticMethod(double d, X x) => "$d$x";
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/members.dart.strong.expect b/pkg/front_end/testcases/enhanced_enums/members.dart.strong.expect
new file mode 100644
index 0000000..d81899d
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/members.dart.strong.expect
@@ -0,0 +1,68 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class E extends core::_Enum /*isEnum*/ {
+ static const field core::List<self::E> values = #C9;
+ static const field self::E one = #C5;
+ static const field self::E two = #C8;
+ final field core::int foo;
+ final field core::int bar = 42;
+ static field self::E staticFoo = self::E::f();
+ const constructor •(core::int index, core::String name, core::int foo) → self::E
+ : self::E::foo = foo, super core::_Enum::•(index, name)
+ ;
+ method toString() → core::String
+ return "E.${this.{core::_Enum::_name}{core::String}}";
+ static factory f() → self::E
+ return #C5;
+ method method(core::int value) → core::int
+ return value.{core::num::+}(10){(core::num) → core::int};
+ method staticMethod(core::double d, core::bool b) → core::String
+ return "${d}${b}";
+}
+class E2<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/ {
+ static const field core::List<self::E2<dynamic>> values = #C14;
+ static const field self::E2<core::num> one = #C11;
+ static const field self::E2<core::String> two = #C13;
+ final field self::E2::X% foo;
+ final field self::E2::X? bar = null;
+ static field () → self::E2<dynamic> staticFoo = () → self::E2<dynamic> => self::E2::f<dynamic>();
+ const constructor •(core::int index, core::String name, self::E2::X% foo) → self::E2<self::E2::X%>
+ : self::E2::foo = foo, super core::_Enum::•(index, name)
+ ;
+ method toString() → core::String
+ return "E2.${this.{core::_Enum::_name}{core::String}}";
+ static factory f<X extends core::Object? = dynamic>() → self::E2<dynamic>
+ return throw 42;
+ method method(core::int value) → core::int
+ return value.{core::num::+}(10){(core::num) → core::int};
+ method staticMethod(core::double d, covariant-by-class self::E2::X% x) → core::String
+ return "${d}${x}";
+}
+static method main() → dynamic {}
+
+constants {
+ #C1 = 1
+ #C2 = 42
+ #C3 = 0
+ #C4 = "one"
+ #C5 = self::E {foo:#C1, bar:#C2, index:#C3, _name:#C4}
+ #C6 = 2
+ #C7 = "two"
+ #C8 = self::E {foo:#C6, bar:#C2, index:#C1, _name:#C7}
+ #C9 = <self::E>[#C5, #C8]
+ #C10 = null
+ #C11 = self::E2<core::num> {foo:#C1, bar:#C10, index:#C3, _name:#C4}
+ #C12 = "2"
+ #C13 = self::E2<core::String> {foo:#C12, bar:#C10, index:#C1, _name:#C7}
+ #C14 = <self::E2<dynamic>>[#C11, #C13]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///members.dart:
+- E. (from org-dartlang-testcase:///members.dart:14:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E2. (from org-dartlang-testcase:///members.dart:32:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/members.dart.strong.transformed.expect b/pkg/front_end/testcases/enhanced_enums/members.dart.strong.transformed.expect
new file mode 100644
index 0000000..d81899d
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/members.dart.strong.transformed.expect
@@ -0,0 +1,68 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class E extends core::_Enum /*isEnum*/ {
+ static const field core::List<self::E> values = #C9;
+ static const field self::E one = #C5;
+ static const field self::E two = #C8;
+ final field core::int foo;
+ final field core::int bar = 42;
+ static field self::E staticFoo = self::E::f();
+ const constructor •(core::int index, core::String name, core::int foo) → self::E
+ : self::E::foo = foo, super core::_Enum::•(index, name)
+ ;
+ method toString() → core::String
+ return "E.${this.{core::_Enum::_name}{core::String}}";
+ static factory f() → self::E
+ return #C5;
+ method method(core::int value) → core::int
+ return value.{core::num::+}(10){(core::num) → core::int};
+ method staticMethod(core::double d, core::bool b) → core::String
+ return "${d}${b}";
+}
+class E2<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/ {
+ static const field core::List<self::E2<dynamic>> values = #C14;
+ static const field self::E2<core::num> one = #C11;
+ static const field self::E2<core::String> two = #C13;
+ final field self::E2::X% foo;
+ final field self::E2::X? bar = null;
+ static field () → self::E2<dynamic> staticFoo = () → self::E2<dynamic> => self::E2::f<dynamic>();
+ const constructor •(core::int index, core::String name, self::E2::X% foo) → self::E2<self::E2::X%>
+ : self::E2::foo = foo, super core::_Enum::•(index, name)
+ ;
+ method toString() → core::String
+ return "E2.${this.{core::_Enum::_name}{core::String}}";
+ static factory f<X extends core::Object? = dynamic>() → self::E2<dynamic>
+ return throw 42;
+ method method(core::int value) → core::int
+ return value.{core::num::+}(10){(core::num) → core::int};
+ method staticMethod(core::double d, covariant-by-class self::E2::X% x) → core::String
+ return "${d}${x}";
+}
+static method main() → dynamic {}
+
+constants {
+ #C1 = 1
+ #C2 = 42
+ #C3 = 0
+ #C4 = "one"
+ #C5 = self::E {foo:#C1, bar:#C2, index:#C3, _name:#C4}
+ #C6 = 2
+ #C7 = "two"
+ #C8 = self::E {foo:#C6, bar:#C2, index:#C1, _name:#C7}
+ #C9 = <self::E>[#C5, #C8]
+ #C10 = null
+ #C11 = self::E2<core::num> {foo:#C1, bar:#C10, index:#C3, _name:#C4}
+ #C12 = "2"
+ #C13 = self::E2<core::String> {foo:#C12, bar:#C10, index:#C1, _name:#C7}
+ #C14 = <self::E2<dynamic>>[#C11, #C13]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///members.dart:
+- E. (from org-dartlang-testcase:///members.dart:14:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E2. (from org-dartlang-testcase:///members.dart:32:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/members.dart.textual_outline.expect b/pkg/front_end/testcases/enhanced_enums/members.dart.textual_outline.expect
new file mode 100644
index 0000000..1037478
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/members.dart.textual_outline.expect
@@ -0,0 +1,3 @@
+enum E { one(1), two(2); final int foo; final int bar = 42; static E staticFoo = new E.f(); const E(this.foo); factory E.f() => E.one; int method(int value) => value + 10; String staticMethod(double d, bool b) => "$d$b"; }
+enum E2<X> { one<num>(1), two("2"); final X foo; final X? bar = null; static var staticFoo = () => new E2.f(); const E2(this.foo); factory E2.f() => throw 42; int method(int value) => value + 10; String staticMethod(double d, X x) => "$d$x"; }
+main() {}
diff --git a/pkg/front_end/testcases/enhanced_enums/members.dart.weak.expect b/pkg/front_end/testcases/enhanced_enums/members.dart.weak.expect
new file mode 100644
index 0000000..7aa96cc
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/members.dart.weak.expect
@@ -0,0 +1,68 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class E extends core::_Enum /*isEnum*/ {
+ static const field core::List<self::E> values = #C9;
+ static const field self::E one = #C5;
+ static const field self::E two = #C8;
+ final field core::int foo;
+ final field core::int bar = 42;
+ static field self::E staticFoo = self::E::f();
+ const constructor •(core::int index, core::String name, core::int foo) → self::E
+ : self::E::foo = foo, super core::_Enum::•(index, name)
+ ;
+ method toString() → core::String
+ return "E.${this.{core::_Enum::_name}{core::String}}";
+ static factory f() → self::E
+ return #C5;
+ method method(core::int value) → core::int
+ return value.{core::num::+}(10){(core::num) → core::int};
+ method staticMethod(core::double d, core::bool b) → core::String
+ return "${d}${b}";
+}
+class E2<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/ {
+ static const field core::List<self::E2<dynamic>> values = #C14;
+ static const field self::E2<core::num> one = #C11;
+ static const field self::E2<core::String> two = #C13;
+ final field self::E2::X% foo;
+ final field self::E2::X? bar = null;
+ static field () → self::E2<dynamic> staticFoo = () → self::E2<dynamic> => self::E2::f<dynamic>();
+ const constructor •(core::int index, core::String name, self::E2::X% foo) → self::E2<self::E2::X%>
+ : self::E2::foo = foo, super core::_Enum::•(index, name)
+ ;
+ method toString() → core::String
+ return "E2.${this.{core::_Enum::_name}{core::String}}";
+ static factory f<X extends core::Object? = dynamic>() → self::E2<dynamic>
+ return throw 42;
+ method method(core::int value) → core::int
+ return value.{core::num::+}(10){(core::num) → core::int};
+ method staticMethod(core::double d, covariant-by-class self::E2::X% x) → core::String
+ return "${d}${x}";
+}
+static method main() → dynamic {}
+
+constants {
+ #C1 = 1
+ #C2 = 42
+ #C3 = 0
+ #C4 = "one"
+ #C5 = self::E {foo:#C1, bar:#C2, index:#C3, _name:#C4}
+ #C6 = 2
+ #C7 = "two"
+ #C8 = self::E {foo:#C6, bar:#C2, index:#C1, _name:#C7}
+ #C9 = <self::E*>[#C5, #C8]
+ #C10 = null
+ #C11 = self::E2<core::num*> {foo:#C1, bar:#C10, index:#C3, _name:#C4}
+ #C12 = "2"
+ #C13 = self::E2<core::String*> {foo:#C12, bar:#C10, index:#C1, _name:#C7}
+ #C14 = <self::E2<dynamic>*>[#C11, #C13]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///members.dart:
+- E. (from org-dartlang-testcase:///members.dart:14:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E2. (from org-dartlang-testcase:///members.dart:32:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/members.dart.weak.modular.expect b/pkg/front_end/testcases/enhanced_enums/members.dart.weak.modular.expect
new file mode 100644
index 0000000..7aa96cc
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/members.dart.weak.modular.expect
@@ -0,0 +1,68 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class E extends core::_Enum /*isEnum*/ {
+ static const field core::List<self::E> values = #C9;
+ static const field self::E one = #C5;
+ static const field self::E two = #C8;
+ final field core::int foo;
+ final field core::int bar = 42;
+ static field self::E staticFoo = self::E::f();
+ const constructor •(core::int index, core::String name, core::int foo) → self::E
+ : self::E::foo = foo, super core::_Enum::•(index, name)
+ ;
+ method toString() → core::String
+ return "E.${this.{core::_Enum::_name}{core::String}}";
+ static factory f() → self::E
+ return #C5;
+ method method(core::int value) → core::int
+ return value.{core::num::+}(10){(core::num) → core::int};
+ method staticMethod(core::double d, core::bool b) → core::String
+ return "${d}${b}";
+}
+class E2<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/ {
+ static const field core::List<self::E2<dynamic>> values = #C14;
+ static const field self::E2<core::num> one = #C11;
+ static const field self::E2<core::String> two = #C13;
+ final field self::E2::X% foo;
+ final field self::E2::X? bar = null;
+ static field () → self::E2<dynamic> staticFoo = () → self::E2<dynamic> => self::E2::f<dynamic>();
+ const constructor •(core::int index, core::String name, self::E2::X% foo) → self::E2<self::E2::X%>
+ : self::E2::foo = foo, super core::_Enum::•(index, name)
+ ;
+ method toString() → core::String
+ return "E2.${this.{core::_Enum::_name}{core::String}}";
+ static factory f<X extends core::Object? = dynamic>() → self::E2<dynamic>
+ return throw 42;
+ method method(core::int value) → core::int
+ return value.{core::num::+}(10){(core::num) → core::int};
+ method staticMethod(core::double d, covariant-by-class self::E2::X% x) → core::String
+ return "${d}${x}";
+}
+static method main() → dynamic {}
+
+constants {
+ #C1 = 1
+ #C2 = 42
+ #C3 = 0
+ #C4 = "one"
+ #C5 = self::E {foo:#C1, bar:#C2, index:#C3, _name:#C4}
+ #C6 = 2
+ #C7 = "two"
+ #C8 = self::E {foo:#C6, bar:#C2, index:#C1, _name:#C7}
+ #C9 = <self::E*>[#C5, #C8]
+ #C10 = null
+ #C11 = self::E2<core::num*> {foo:#C1, bar:#C10, index:#C3, _name:#C4}
+ #C12 = "2"
+ #C13 = self::E2<core::String*> {foo:#C12, bar:#C10, index:#C1, _name:#C7}
+ #C14 = <self::E2<dynamic>*>[#C11, #C13]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///members.dart:
+- E. (from org-dartlang-testcase:///members.dart:14:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E2. (from org-dartlang-testcase:///members.dart:32:9)
diff --git a/pkg/front_end/testcases/enhanced_enums/members.dart.weak.outline.expect b/pkg/front_end/testcases/enhanced_enums/members.dart.weak.outline.expect
new file mode 100644
index 0000000..f6877f8
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/members.dart.weak.outline.expect
@@ -0,0 +1,54 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class E extends core::_Enum /*isEnum*/ {
+ static const field core::List<self::E> values = const <self::E>[self::E::one, self::E::two];
+ static const field self::E one = const self::E::•(0, "one", 1);
+ static const field self::E two = const self::E::•(1, "two", 2);
+ final field core::int foo;
+ final field core::int bar;
+ static field self::E staticFoo;
+ const constructor •(core::int index, core::String name, core::int foo) → self::E
+ : self::E::foo = foo, super core::_Enum::•(index, name)
+ ;
+ method toString() → core::String
+ return "E.${this.{core::_Enum::_name}{core::String}}";
+ static factory f() → self::E
+ ;
+ method method(core::int value) → core::int
+ ;
+ method staticMethod(core::double d, core::bool b) → core::String
+ ;
+}
+class E2<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/ {
+ static const field core::List<self::E2<dynamic>> values = const <self::E2<dynamic>>[self::E2::one, self::E2::two];
+ static const field self::E2<core::num> one = const self::E2::•<core::num>(0, "one", 1);
+ static const field self::E2<core::String> two = const self::E2::•<core::String>(1, "two", "2");
+ final field self::E2::X% foo;
+ final field self::E2::X? bar;
+ static field () → self::E2<dynamic> staticFoo;
+ const constructor •(core::int index, core::String name, self::E2::X% foo) → self::E2<self::E2::X%>
+ : self::E2::foo = foo, super core::_Enum::•(index, name)
+ ;
+ method toString() → core::String
+ return "E2.${this.{core::_Enum::_name}{core::String}}";
+ static factory f<X extends core::Object? = dynamic>() → self::E2<dynamic>
+ ;
+ method method(core::int value) → core::int
+ ;
+ method staticMethod(core::double d, covariant-by-class self::E2::X% x) → core::String
+ ;
+}
+static method main() → dynamic
+ ;
+
+
+Extra constant evaluation status:
+Evaluated: ListLiteral @ org-dartlang-testcase:///members.dart:5:6 -> ListConstant(const <E*>[const E{E.foo: 1, E.bar: null, _Enum.index: 0, _Enum._name: "one"}, const E{E.foo: 2, E.bar: null, _Enum.index: 1, _Enum._name: "two"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///members.dart:6:3 -> InstanceConstant(const E{E.foo: 1, E.bar: null, _Enum.index: 0, _Enum._name: "one"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///members.dart:7:3 -> InstanceConstant(const E{E.foo: 2, E.bar: null, _Enum.index: 1, _Enum._name: "two"})
+Evaluated: ListLiteral @ org-dartlang-testcase:///members.dart:23:6 -> ListConstant(const <E2<dynamic>*>[const E2<num*>{E2.foo: 1, E2.bar: null, _Enum.index: 0, _Enum._name: "one"}, const E2<String*>{E2.foo: "2", E2.bar: null, _Enum.index: 1, _Enum._name: "two"}])
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///members.dart:24:3 -> InstanceConstant(const E2<num*>{E2.foo: 1, E2.bar: null, _Enum.index: 0, _Enum._name: "one"})
+Evaluated: ConstructorInvocation @ org-dartlang-testcase:///members.dart:25:3 -> InstanceConstant(const E2<String*>{E2.foo: "2", E2.bar: null, _Enum.index: 1, _Enum._name: "two"})
+Extra constant evaluation: evaluated: 18, effectively constant: 6
diff --git a/pkg/front_end/testcases/enhanced_enums/members.dart.weak.transformed.expect b/pkg/front_end/testcases/enhanced_enums/members.dart.weak.transformed.expect
new file mode 100644
index 0000000..7aa96cc
--- /dev/null
+++ b/pkg/front_end/testcases/enhanced_enums/members.dart.weak.transformed.expect
@@ -0,0 +1,68 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+class E extends core::_Enum /*isEnum*/ {
+ static const field core::List<self::E> values = #C9;
+ static const field self::E one = #C5;
+ static const field self::E two = #C8;
+ final field core::int foo;
+ final field core::int bar = 42;
+ static field self::E staticFoo = self::E::f();
+ const constructor •(core::int index, core::String name, core::int foo) → self::E
+ : self::E::foo = foo, super core::_Enum::•(index, name)
+ ;
+ method toString() → core::String
+ return "E.${this.{core::_Enum::_name}{core::String}}";
+ static factory f() → self::E
+ return #C5;
+ method method(core::int value) → core::int
+ return value.{core::num::+}(10){(core::num) → core::int};
+ method staticMethod(core::double d, core::bool b) → core::String
+ return "${d}${b}";
+}
+class E2<X extends core::Object? = dynamic> extends core::_Enum /*isEnum*/ {
+ static const field core::List<self::E2<dynamic>> values = #C14;
+ static const field self::E2<core::num> one = #C11;
+ static const field self::E2<core::String> two = #C13;
+ final field self::E2::X% foo;
+ final field self::E2::X? bar = null;
+ static field () → self::E2<dynamic> staticFoo = () → self::E2<dynamic> => self::E2::f<dynamic>();
+ const constructor •(core::int index, core::String name, self::E2::X% foo) → self::E2<self::E2::X%>
+ : self::E2::foo = foo, super core::_Enum::•(index, name)
+ ;
+ method toString() → core::String
+ return "E2.${this.{core::_Enum::_name}{core::String}}";
+ static factory f<X extends core::Object? = dynamic>() → self::E2<dynamic>
+ return throw 42;
+ method method(core::int value) → core::int
+ return value.{core::num::+}(10){(core::num) → core::int};
+ method staticMethod(core::double d, covariant-by-class self::E2::X% x) → core::String
+ return "${d}${x}";
+}
+static method main() → dynamic {}
+
+constants {
+ #C1 = 1
+ #C2 = 42
+ #C3 = 0
+ #C4 = "one"
+ #C5 = self::E {foo:#C1, bar:#C2, index:#C3, _name:#C4}
+ #C6 = 2
+ #C7 = "two"
+ #C8 = self::E {foo:#C6, bar:#C2, index:#C1, _name:#C7}
+ #C9 = <self::E*>[#C5, #C8]
+ #C10 = null
+ #C11 = self::E2<core::num*> {foo:#C1, bar:#C10, index:#C3, _name:#C4}
+ #C12 = "2"
+ #C13 = self::E2<core::String*> {foo:#C12, bar:#C10, index:#C1, _name:#C7}
+ #C14 = <self::E2<dynamic>*>[#C11, #C13]
+}
+
+
+Constructor coverage from constants:
+org-dartlang-testcase:///members.dart:
+- E. (from org-dartlang-testcase:///members.dart:14:9)
+- _Enum. (from org-dartlang-sdk:///sdk/lib/core/enum.dart:76:9)
+- Object. (from org-dartlang-sdk:///sdk/lib/core/object.dart:25:9)
+- E2. (from org-dartlang-testcase:///members.dart:32:9)
diff --git a/pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart.weak.expect b/pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart.weak.expect
index dfe0844..d038898 100644
--- a/pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart.weak.expect
+++ b/pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart.weak.expect
@@ -3,7 +3,7 @@
// Problems in library:
//
// pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart:11:6: Error: This requires the 'extension-types' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.16 or higher, and running 'pub get'.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
// test(E e) {} // Error.
// ^
//
diff --git a/pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart.weak.modular.expect b/pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart.weak.modular.expect
index dfe0844..d038898 100644
--- a/pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart.weak.modular.expect
@@ -3,7 +3,7 @@
// Problems in library:
//
// pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart:11:6: Error: This requires the 'extension-types' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.16 or higher, and running 'pub get'.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
// test(E e) {} // Error.
// ^
//
diff --git a/pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart.weak.outline.expect b/pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart.weak.outline.expect
index 7be45bb..05bcb32 100644
--- a/pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart.weak.outline.expect
@@ -3,7 +3,7 @@
// Problems in library:
//
// pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart:11:6: Error: This requires the 'extension-types' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.16 or higher, and running 'pub get'.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
// test(E e) {} // Error.
// ^
//
diff --git a/pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart.weak.transformed.expect b/pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart.weak.transformed.expect
index dfe0844..d038898 100644
--- a/pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
// Problems in library:
//
// pkg/front_end/testcases/general/extension_type_when_experiment_not_enabled.dart:11:6: Error: This requires the 'extension-types' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.16 or higher, and running 'pub get'.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
// test(E e) {} // Error.
// ^
//
diff --git a/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.expect b/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.expect
index 0c596cb..1fcab84f 100644
--- a/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.expect
+++ b/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.expect
@@ -3,7 +3,7 @@
// Problems in library:
//
// pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart:9:11: Error: This requires the 'extension-types' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.16 or higher, and running 'pub get'.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
// extension type E on A {} // Error because of 'type'.
// ^^^^
//
diff --git a/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.modular.expect b/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.modular.expect
index 0c596cb..1fcab84f 100644
--- a/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.modular.expect
@@ -3,7 +3,7 @@
// Problems in library:
//
// pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart:9:11: Error: This requires the 'extension-types' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.16 or higher, and running 'pub get'.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
// extension type E on A {} // Error because of 'type'.
// ^^^^
//
diff --git a/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.outline.expect b/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.outline.expect
index 8b21c25..9141057 100644
--- a/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.outline.expect
@@ -3,7 +3,7 @@
// Problems in library:
//
// pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart:9:11: Error: This requires the 'extension-types' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.16 or higher, and running 'pub get'.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
// extension type E on A {} // Error because of 'type'.
// ^^^^
//
diff --git a/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.transformed.expect b/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.transformed.expect
index 0c596cb..1fcab84f 100644
--- a/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart.weak.transformed.expect
@@ -3,7 +3,7 @@
// Problems in library:
//
// pkg/front_end/testcases/general/extension_types_feature_not_enabled.dart:9:11: Error: This requires the 'extension-types' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.16 or higher, and running 'pub get'.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
// extension type E on A {} // Error because of 'type'.
// ^^^^
//
diff --git a/pkg/front_end/testcases/general/issue48090.dart b/pkg/front_end/testcases/general/issue48090.dart
new file mode 100644
index 0000000..5164441
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48090.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:isolate';
+
+void main() {
+ String debugName = Isolate.current.debugName ?? ''; // ok
+}
+
+void test() {
+ String debugName = Isolate.current.debugName; // error
+}
diff --git a/pkg/front_end/testcases/general/issue48090.dart.textual_outline.expect b/pkg/front_end/testcases/general/issue48090.dart.textual_outline.expect
new file mode 100644
index 0000000..9ab0a0f
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48090.dart.textual_outline.expect
@@ -0,0 +1,4 @@
+import 'dart:isolate';
+
+void main() {}
+void test() {}
diff --git a/pkg/front_end/testcases/general/issue48090.dart.textual_outline_modelled.expect b/pkg/front_end/testcases/general/issue48090.dart.textual_outline_modelled.expect
new file mode 100644
index 0000000..9ab0a0f
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48090.dart.textual_outline_modelled.expect
@@ -0,0 +1,4 @@
+import 'dart:isolate';
+
+void main() {}
+void test() {}
diff --git a/pkg/front_end/testcases/general/issue48090.dart.weak.expect b/pkg/front_end/testcases/general/issue48090.dart.weak.expect
new file mode 100644
index 0000000..9a0be82
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48090.dart.weak.expect
@@ -0,0 +1,22 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue48090.dart:12:38: Error: A value of type 'String?' can't be assigned to a variable of type 'String' because 'String?' is nullable and 'String' isn't.
+// String debugName = Isolate.current.debugName; // error
+// ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:isolate" as iso;
+
+import "dart:isolate";
+
+static method main() → void {
+ core::String debugName = let final core::String? #t1 = iso::Isolate::current.{iso::Isolate::debugName}{core::String?} in #t1 == null ?{core::String} "" : #t1{core::String};
+}
+static method test() → void {
+ core::String debugName = invalid-expression "pkg/front_end/testcases/general/issue48090.dart:12:38: Error: A value of type 'String?' can't be assigned to a variable of type 'String' because 'String?' is nullable and 'String' isn't.
+ String debugName = Isolate.current.debugName; // error
+ ^" in iso::Isolate::current.{iso::Isolate::debugName}{core::String?} as{TypeError,ForNonNullableByDefault} core::String;
+}
diff --git a/pkg/front_end/testcases/general/issue48090.dart.weak.modular.expect b/pkg/front_end/testcases/general/issue48090.dart.weak.modular.expect
new file mode 100644
index 0000000..9a0be82
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48090.dart.weak.modular.expect
@@ -0,0 +1,22 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue48090.dart:12:38: Error: A value of type 'String?' can't be assigned to a variable of type 'String' because 'String?' is nullable and 'String' isn't.
+// String debugName = Isolate.current.debugName; // error
+// ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:isolate" as iso;
+
+import "dart:isolate";
+
+static method main() → void {
+ core::String debugName = let final core::String? #t1 = iso::Isolate::current.{iso::Isolate::debugName}{core::String?} in #t1 == null ?{core::String} "" : #t1{core::String};
+}
+static method test() → void {
+ core::String debugName = invalid-expression "pkg/front_end/testcases/general/issue48090.dart:12:38: Error: A value of type 'String?' can't be assigned to a variable of type 'String' because 'String?' is nullable and 'String' isn't.
+ String debugName = Isolate.current.debugName; // error
+ ^" in iso::Isolate::current.{iso::Isolate::debugName}{core::String?} as{TypeError,ForNonNullableByDefault} core::String;
+}
diff --git a/pkg/front_end/testcases/general/issue48090.dart.weak.outline.expect b/pkg/front_end/testcases/general/issue48090.dart.weak.outline.expect
new file mode 100644
index 0000000..bc35ad4
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48090.dart.weak.outline.expect
@@ -0,0 +1,9 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+
+import "dart:isolate";
+
+static method main() → void
+ ;
+static method test() → void
+ ;
diff --git a/pkg/front_end/testcases/general/issue48090.dart.weak.transformed.expect b/pkg/front_end/testcases/general/issue48090.dart.weak.transformed.expect
new file mode 100644
index 0000000..7288854
--- /dev/null
+++ b/pkg/front_end/testcases/general/issue48090.dart.weak.transformed.expect
@@ -0,0 +1,22 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/issue48090.dart:12:38: Error: A value of type 'String?' can't be assigned to a variable of type 'String' because 'String?' is nullable and 'String' isn't.
+// String debugName = Isolate.current.debugName; // error
+// ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:isolate" as iso;
+
+import "dart:isolate";
+
+static method main() → void {
+ core::String debugName = let final core::String? #t1 = iso::Isolate::current.{iso::Isolate::debugName}{core::String?} in #t1 == null ?{core::String} "" : #t1{core::String};
+}
+static method test() → void {
+ core::String debugName = invalid-expression "pkg/front_end/testcases/general/issue48090.dart:12:38: Error: A value of type 'String?' can't be assigned to a variable of type 'String' because 'String?' is nullable and 'String' isn't.
+ String debugName = Isolate.current.debugName; // error
+ ^" in iso::Isolate::current.{iso::Isolate::debugName}{core::String?};
+}
diff --git a/pkg/front_end/testcases/general/macro_class.dart.weak.expect b/pkg/front_end/testcases/general/macro_class.dart.weak.expect
index 5a61151..ce6b7bb 100644
--- a/pkg/front_end/testcases/general/macro_class.dart.weak.expect
+++ b/pkg/front_end/testcases/general/macro_class.dart.weak.expect
@@ -3,22 +3,22 @@
// Problems in library:
//
// pkg/front_end/testcases/general/macro_class.dart:8:7: Error: This requires the 'macros' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.16 or higher, and running 'pub get'.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
// macro class Class1 {}
// ^^^^^
//
// pkg/front_end/testcases/general/macro_class.dart:9:16: Error: This requires the 'macros' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.16 or higher, and running 'pub get'.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
// abstract macro class Class2 {}
// ^^^^^
//
// pkg/front_end/testcases/general/macro_class.dart:10:7: Error: This requires the 'macros' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.16 or higher, and running 'pub get'.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
// macro class Class3 = Super with Mixin;
// ^^^^^
//
// pkg/front_end/testcases/general/macro_class.dart:11:16: Error: This requires the 'macros' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.16 or higher, and running 'pub get'.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
// abstract macro class Class4 = Super with Mixin;
// ^^^^^
//
diff --git a/pkg/front_end/testcases/general/macro_class.dart.weak.modular.expect b/pkg/front_end/testcases/general/macro_class.dart.weak.modular.expect
index 5a61151..ce6b7bb 100644
--- a/pkg/front_end/testcases/general/macro_class.dart.weak.modular.expect
+++ b/pkg/front_end/testcases/general/macro_class.dart.weak.modular.expect
@@ -3,22 +3,22 @@
// Problems in library:
//
// pkg/front_end/testcases/general/macro_class.dart:8:7: Error: This requires the 'macros' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.16 or higher, and running 'pub get'.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
// macro class Class1 {}
// ^^^^^
//
// pkg/front_end/testcases/general/macro_class.dart:9:16: Error: This requires the 'macros' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.16 or higher, and running 'pub get'.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
// abstract macro class Class2 {}
// ^^^^^
//
// pkg/front_end/testcases/general/macro_class.dart:10:7: Error: This requires the 'macros' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.16 or higher, and running 'pub get'.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
// macro class Class3 = Super with Mixin;
// ^^^^^
//
// pkg/front_end/testcases/general/macro_class.dart:11:16: Error: This requires the 'macros' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.16 or higher, and running 'pub get'.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
// abstract macro class Class4 = Super with Mixin;
// ^^^^^
//
diff --git a/pkg/front_end/testcases/general/macro_class.dart.weak.outline.expect b/pkg/front_end/testcases/general/macro_class.dart.weak.outline.expect
index 13e7bcc..614ee32 100644
--- a/pkg/front_end/testcases/general/macro_class.dart.weak.outline.expect
+++ b/pkg/front_end/testcases/general/macro_class.dart.weak.outline.expect
@@ -3,22 +3,22 @@
// Problems in library:
//
// pkg/front_end/testcases/general/macro_class.dart:8:7: Error: This requires the 'macros' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.16 or higher, and running 'pub get'.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
// macro class Class1 {}
// ^^^^^
//
// pkg/front_end/testcases/general/macro_class.dart:9:16: Error: This requires the 'macros' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.16 or higher, and running 'pub get'.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
// abstract macro class Class2 {}
// ^^^^^
//
// pkg/front_end/testcases/general/macro_class.dart:10:7: Error: This requires the 'macros' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.16 or higher, and running 'pub get'.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
// macro class Class3 = Super with Mixin;
// ^^^^^
//
// pkg/front_end/testcases/general/macro_class.dart:11:16: Error: This requires the 'macros' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.16 or higher, and running 'pub get'.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
// abstract macro class Class4 = Super with Mixin;
// ^^^^^
//
diff --git a/pkg/front_end/testcases/general/macro_class.dart.weak.transformed.expect b/pkg/front_end/testcases/general/macro_class.dart.weak.transformed.expect
index 506e808..7f71bca 100644
--- a/pkg/front_end/testcases/general/macro_class.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general/macro_class.dart.weak.transformed.expect
@@ -3,22 +3,22 @@
// Problems in library:
//
// pkg/front_end/testcases/general/macro_class.dart:8:7: Error: This requires the 'macros' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.16 or higher, and running 'pub get'.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
// macro class Class1 {}
// ^^^^^
//
// pkg/front_end/testcases/general/macro_class.dart:9:16: Error: This requires the 'macros' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.16 or higher, and running 'pub get'.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
// abstract macro class Class2 {}
// ^^^^^
//
// pkg/front_end/testcases/general/macro_class.dart:10:7: Error: This requires the 'macros' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.16 or higher, and running 'pub get'.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
// macro class Class3 = Super with Mixin;
// ^^^^^
//
// pkg/front_end/testcases/general/macro_class.dart:11:16: Error: This requires the 'macros' language feature to be enabled.
-// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.16 or higher, and running 'pub get'.
+// Try updating your pubspec.yaml to set the minimum SDK constraint to 2.17 or higher, and running 'pub get'.
// abstract macro class Class4 = Super with Mixin;
// ^^^^^
//
diff --git a/pkg/front_end/testcases/textual_outline.status b/pkg/front_end/testcases/textual_outline.status
index 386be8a..6736b08 100644
--- a/pkg/front_end/testcases/textual_outline.status
+++ b/pkg/front_end/testcases/textual_outline.status
@@ -30,6 +30,8 @@
dart2js/late_statics: FormatterCrash
enhanced_enums/entries_with_type_arguments: FormatterCrash
enhanced_enums/inference_in_constructor_parameters: FormatterCrash
+enhanced_enums/issue48084: FormatterCrash
+enhanced_enums/members: FormatterCrash
enhanced_enums/qualified_names_with_no_type_arguments: FormatterCrash
enhanced_enums/redirecting_initializers: FormatterCrash
enhanced_enums/simple_fields: FormatterCrash
diff --git a/pkg/front_end/tool/smoke_test_quick.dart b/pkg/front_end/tool/smoke_test_quick.dart
index 2b7a200..12b77c3 100644
--- a/pkg/front_end/tool/smoke_test_quick.dart
+++ b/pkg/front_end/tool/smoke_test_quick.dart
@@ -29,9 +29,6 @@
futures.add(run(
"pkg/front_end/test/generated_files_up_to_date_git_test.dart", [],
filter: false));
- futures.add(run("tools/yaml2json.dart",
- ["sdk/lib/libraries.yaml", "sdk/lib/libraries.json", '--check'],
- filter: false));
await Future.wait(futures);
print("\n-----------------------\n");
print("Done with exitcode $exitCode in ${stopwatch.elapsedMilliseconds} ms");
diff --git a/pkg/kernel/lib/default_language_version.dart b/pkg/kernel/lib/default_language_version.dart
index d4c3163..cc7de77 100644
--- a/pkg/kernel/lib/default_language_version.dart
+++ b/pkg/kernel/lib/default_language_version.dart
@@ -9,4 +9,4 @@
import "ast.dart";
-Version defaultLanguageVersion = const Version(2, 16);
+Version defaultLanguageVersion = const Version(2, 17);
diff --git a/pkg/test_runner/lib/src/configuration.dart b/pkg/test_runner/lib/src/configuration.dart
index 51110c0..198c01a 100644
--- a/pkg/test_runner/lib/src/configuration.dart
+++ b/pkg/test_runner/lib/src/configuration.dart
@@ -64,6 +64,7 @@
this.keepGeneratedFiles,
this.sharedOptions,
String packages,
+ this.serviceResponseSizesDirectory,
this.suiteDirectory,
this.outputDirectory,
this.reproducingArguments,
@@ -176,6 +177,7 @@
return _packages;
}
+ final String serviceResponseSizesDirectory;
final String outputDirectory;
final String suiteDirectory;
String get babel => configuration.babel;
diff --git a/pkg/test_runner/lib/src/options.dart b/pkg/test_runner/lib/src/options.dart
index dccb5f4..142b123 100644
--- a/pkg/test_runner/lib/src/options.dart
+++ b/pkg/test_runner/lib/src/options.dart
@@ -338,7 +338,10 @@
hide: true),
_Option.bool('print_passing_stdout',
'Print the stdout of passing, as well as failing, tests.',
- hide: true)
+ hide: true),
+ _Option('service_response_sizes_directory',
+ 'Log VM service response sizes in CSV files in the provided directory',
+ hide: true),
];
/// For printing out reproducing command lines, we don't want to add these
@@ -777,6 +780,8 @@
localIP: data["local_ip"] as String,
sharedOptions: sharedOptions,
packages: data["packages"] as String,
+ serviceResponseSizesDirectory:
+ data['service_response_sizes_directory'] as String,
suiteDirectory: data["suite_dir"] as String,
outputDirectory: data["output_directory"] as String,
reproducingArguments:
diff --git a/pkg/test_runner/lib/src/test_suite.dart b/pkg/test_runner/lib/src/test_suite.dart
index 9a5d685..bae578b 100644
--- a/pkg/test_runner/lib/src/test_suite.dart
+++ b/pkg/test_runner/lib/src/test_suite.dart
@@ -763,6 +763,8 @@
...vmOptionsList[vmOptionsVariant],
...extraVmOptions,
if (emitDdsTest) '-DUSE_DDS=true',
+ if (configuration.serviceResponseSizesDirectory != null)
+ '-DSERVICE_RESPONSE_SIZES_DIR=${configuration.serviceResponseSizesDirectory}',
];
var isCrashExpected = expectations.contains(Expectation.crash);
var commands = _makeCommands(
diff --git a/pkg/vm/lib/transformations/type_flow/transformer.dart b/pkg/vm/lib/transformations/type_flow/transformer.dart
index d82925a..6533e54 100644
--- a/pkg/vm/lib/transformations/type_flow/transformer.dart
+++ b/pkg/vm/lib/transformations/type_flow/transformer.dart
@@ -1583,12 +1583,22 @@
if (_isExtendedBoolLiteral(condition)) {
final bool value = _getExtendedBoolLiteralValue(condition);
final Expression expr = transform(value ? node.then : node.otherwise);
+ Expression result;
if (condition is BlockExpression) {
condition.value = expr;
expr.parent = condition;
- return condition;
+ result = condition;
} else {
- return expr;
+ result = expr;
+ }
+ if (node.staticType != result.getStaticType(staticTypeContext)) {
+ return StaticInvocation(
+ unsafeCast,
+ Arguments([result],
+ types: [visitDartType(node.staticType, cannotRemoveSentinel)]))
+ ..fileOffset = node.fileOffset;
+ } else {
+ return result;
}
}
node.condition = condition..parent = node;
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/null_test_elimination2_nnbd_strong.dart b/pkg/vm/testcases/transformations/type_flow/transformer/null_test_elimination2_nnbd_strong.dart
new file mode 100644
index 0000000..47a6a15
--- /dev/null
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/null_test_elimination2_nnbd_strong.dart
@@ -0,0 +1,20 @@
+// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Tests elimination of null test in a conditional expression of
+// a different static type.
+
+bool _defaultCheck([dynamic _]) => true;
+
+void testStaticTypeOfConditional<T>(bool Function(T error)? check, Object e) {
+ // Verify that null test elimination leaves unsafeCast here to
+ // keep static type of 'check ?? _defaultCheck' expression.
+ if (e is T && (check ?? _defaultCheck)(e)) {
+ print('ok');
+ }
+}
+
+void main() {
+ testStaticTypeOfConditional<String>((_) => true, 'hi');
+}
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/null_test_elimination2_nnbd_strong.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/null_test_elimination2_nnbd_strong.dart.expect
new file mode 100644
index 0000000..de2490b
--- /dev/null
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/null_test_elimination2_nnbd_strong.dart.expect
@@ -0,0 +1,19 @@
+library #lib /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+static method _defaultCheck([dynamic _ = #C1]) → core::bool
+ return true;
+static method testStaticTypeOfConditional<T extends core::Object? = dynamic>([@vm.inferred-type.metadata=!] (self::testStaticTypeOfConditional::T%) →? core::bool check) → void {
+ if(#C2 is{ForNonNullableByDefault} self::testStaticTypeOfConditional::T% && (let final (self::testStaticTypeOfConditional::T%) →? core::bool #t1 = check in _in::unsafeCast<core::Function>(#t1{(self::testStaticTypeOfConditional::T%) → core::bool}))(#C2) as{TypeError,ForDynamic,ForNonNullableByDefault} core::bool) {
+ core::print("ok");
+ }
+}
+static method main() → void {
+ self::testStaticTypeOfConditional<core::String>((core::String _) → core::bool => true);
+}
+constants {
+ #C1 = null
+ #C2 = "hi"
+}
diff --git a/pkg/vm_service/test/common/test_helper.dart b/pkg/vm_service/test/common/test_helper.dart
index e16e307d..62ced95 100644
--- a/pkg/vm_service/test/common/test_helper.dart
+++ b/pkg/vm_service/test/common/test_helper.dart
@@ -107,6 +107,7 @@
bool pause_on_unhandled_exceptions,
bool testeeControlsServer,
bool useAuthToken,
+ List<String>? experiments,
List<String>? extraArgs,
) {
return _spawnDartProcess(
@@ -115,6 +116,7 @@
pause_on_unhandled_exceptions,
testeeControlsServer,
useAuthToken,
+ experiments,
extraArgs);
}
@@ -124,6 +126,7 @@
bool pause_on_unhandled_exceptions,
bool testeeControlsServer,
bool useAuthToken,
+ List<String>? experiments,
List<String>? extraArgs) {
String dartExecutable = io.Platform.executable;
@@ -143,6 +146,9 @@
fullArgs.add('--pause-isolates-on-unhandled-exceptions');
}
fullArgs.add('--profiler');
+ if (experiments != null) {
+ fullArgs.addAll(experiments.map((e) => '--enable-experiment=$e'));
+ }
if (extraArgs != null) {
fullArgs.addAll(extraArgs);
}
@@ -152,7 +158,6 @@
fullArgs.add('--enable-vm-service:0');
}
fullArgs.addAll(args);
-
return _spawnCommon(dartExecutable, fullArgs, <String, String>{});
}
@@ -180,6 +185,7 @@
bool pause_on_unhandled_exceptions,
bool testeeControlsServer,
bool useAuthToken,
+ List<String>? experiments,
List<String>? extraArgs) {
return _spawnProcess(
pause_on_start,
@@ -187,6 +193,7 @@
pause_on_unhandled_exceptions,
testeeControlsServer,
useAuthToken,
+ experiments,
extraArgs)
.then((p) {
Completer<Uri> completer = Completer<Uri>();
@@ -247,25 +254,27 @@
}
class _ServiceTesterRunner {
- Future run(
- {List<String>? mainArgs,
- List<String>? extraArgs,
- List<VMTest>? vmTests,
- List<IsolateTest>? isolateTests,
- required String scriptName,
- bool pause_on_start = false,
- bool pause_on_exit = false,
- bool verbose_vm = false,
- bool pause_on_unhandled_exceptions = false,
- bool testeeControlsServer = false,
- bool useAuthToken = false}) async {
+ Future run({
+ List<String>? mainArgs,
+ List<String>? extraArgs,
+ List<String>? experiments,
+ List<VMTest>? vmTests,
+ List<IsolateTest>? isolateTests,
+ required String scriptName,
+ bool pause_on_start = false,
+ bool pause_on_exit = false,
+ bool verbose_vm = false,
+ bool pause_on_unhandled_exceptions = false,
+ bool testeeControlsServer = false,
+ bool useAuthToken = false,
+ }) async {
var process = _ServiceTesteeLauncher(scriptName);
late VmService vm;
late IsolateRef isolate;
setUp(() async {
await process
.launch(pause_on_start, pause_on_exit, pause_on_unhandled_exceptions,
- testeeControlsServer, useAuthToken, extraArgs)
+ testeeControlsServer, useAuthToken, experiments, extraArgs)
.then((Uri serverAddress) async {
if (mainArgs!.contains("--gdb")) {
var pid = process.process!.pid;
@@ -277,7 +286,6 @@
vm = await vmServiceConnectUri(serviceWebsocketAddress);
print('Done loading VM');
isolate = await getFirstIsolate(vm);
- print('Got first isolate');
});
});
@@ -327,13 +335,11 @@
Completer<dynamic>? completer = Completer();
late StreamSubscription subscription;
subscription = service.onIsolateEvent.listen((Event event) async {
- print('Isolate event: $event');
if (completer == null) {
await subscription.cancel();
return;
}
if (event.kind == EventKind.kIsolateRunnable) {
- print(event.isolate!.name);
vm = await service.getVM();
await subscription.cancel();
await service.streamCancel(EventStreams.kIsolate);
@@ -372,6 +378,7 @@
bool pause_on_unhandled_exceptions = false,
bool testeeControlsServer = false,
bool useAuthToken = false,
+ List<String>? experiments,
List<String>? extraArgs,
}) async {
assert(!pause_on_start || testeeBefore == null);
@@ -390,6 +397,7 @@
pause_on_start: pause_on_start,
pause_on_exit: pause_on_exit,
verbose_vm: verbose_vm,
+ experiments: experiments,
pause_on_unhandled_exceptions: pause_on_unhandled_exceptions,
testeeControlsServer: testeeControlsServer,
useAuthToken: useAuthToken);
diff --git a/pkg/vm_service/test/eval_named_args_anywhere_test.dart b/pkg/vm_service/test/eval_named_args_anywhere_test.dart
new file mode 100644
index 0000000..ad01d46
--- /dev/null
+++ b/pkg/vm_service/test/eval_named_args_anywhere_test.dart
@@ -0,0 +1,72 @@
+// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// @dart=2.17
+// ignore_for_file: unused_element
+
+import 'dart:developer';
+import 'package:test/test.dart';
+import 'package:vm_service/vm_service.dart';
+import 'common/service_test_common.dart';
+import 'common/test_helper.dart';
+
+int foo(int a, {required int b}) {
+ return a - b;
+}
+
+class _MyClass {
+ int foo(int a, {required int b}) {
+ return a - b;
+ }
+
+ static int baz(int a, {required int b}) {
+ return a - b;
+ }
+}
+
+void testFunction() {
+ debugger();
+}
+
+final tests = <IsolateTest>[
+ hasStoppedAtBreakpoint,
+ (VmService service, IsolateRef isolateRef) async {
+ final isolateId = isolateRef.id!;
+ final isolate = await service.getIsolate(isolateId);
+
+ final rootLibId = isolate.rootLib!.id!;
+
+ // Evaluate top-level function
+ var result = await service.evaluate(
+ isolateId,
+ rootLibId,
+ 'foo(b: 10, 50)',
+ ) as InstanceRef;
+ expect(result.valueAsString, '40');
+
+ // Evaluate class instance method
+ result = await service.evaluate(
+ isolateId,
+ rootLibId,
+ '_MyClass().foo(b: 10, 50)',
+ ) as InstanceRef;
+ expect(result.valueAsString, '40');
+
+ // Evaluate static method
+ result = await service.evaluate(
+ isolateId,
+ rootLibId,
+ '_MyClass.baz(b: 10, 50)',
+ ) as InstanceRef;
+ expect(result.valueAsString, '40');
+ },
+];
+
+main([args = const <String>[]]) => runIsolateTests(
+ args,
+ tests,
+ 'eval_named_args_anywhere_test.dart',
+ testeeConcurrent: testFunction,
+ experiments: ['named-arguments-anywhere'],
+ );
diff --git a/runtime/bin/ffi_test/ffi_test_functions_vmspecific.cc b/runtime/bin/ffi_test/ffi_test_functions_vmspecific.cc
index cf10a4e..6b546ad 100644
--- a/runtime/bin/ffi_test/ffi_test_functions_vmspecific.cc
+++ b/runtime/bin/ffi_test/ffi_test_functions_vmspecific.cc
@@ -906,6 +906,34 @@
}
////////////////////////////////////////////////////////////////////////////////
+// Helpers used for isolate exit tests.
+////////////////////////////////////////////////////////////////////////////////
+
+// This method consumes and ignores unwind error raised by `Isolate.exit` called
+// by dart `callIsolateExit` method.
+DART_EXPORT void IsolateExitTest_LookupAndCallIsolateExit(int i) {
+ Dart_Handle root_lib = Dart_RootLibrary();
+ fprintf(stderr, "IsolateExitTest_LookupAndCallIsolateExit i:%d\n", i);
+ if (i > 0) {
+ Dart_Handle method_name =
+ Dart_NewStringFromCString("recurseLookupAndCallWorker");
+ Dart_Handle dart_args[1];
+ dart_args[0] = Dart_NewInteger(i - 1);
+ Dart_Handle result = Dart_Invoke(root_lib, method_name, 1, dart_args);
+ ENSURE(Dart_IsError(result));
+ } else {
+ Dart_Handle method_name = Dart_NewStringFromCString("callIsolateExit");
+ Dart_Handle result = Dart_Invoke(root_lib, method_name, 0, NULL);
+ if (Dart_IsError(result)) {
+ fprintf(stderr,
+ "%d failed to invoke %s in child isolate: %s, carrying on..\n", i,
+ "callIsolateExit", Dart_GetError(result));
+ }
+ ENSURE(Dart_IsError(result));
+ }
+}
+
+////////////////////////////////////////////////////////////////////////////////
// Functions for handle tests.
//
// vmspecific_handle_test.dart (statically linked).
diff --git a/runtime/observatory/tests/service/test_helper.dart b/runtime/observatory/tests/service/test_helper.dart
index 487c098..a0e0c19 100644
--- a/runtime/observatory/tests/service/test_helper.dart
+++ b/runtime/observatory/tests/service/test_helper.dart
@@ -18,6 +18,10 @@
/// Determines whether DDS is enabled for this test run.
const bool useDds = const bool.fromEnvironment('USE_DDS');
+/// The directory to output VM service response size data files to.
+const String serviceResponseSizesDir =
+ const String.fromEnvironment('SERVICE_RESPONSE_SIZES_DIR');
+
/// The extra arguments to use
const List<String> extraDebuggingArgs = ['--lazy-async-stacks'];
@@ -178,6 +182,15 @@
if (!testeeControlsServer) {
fullArgs.add('--enable-vm-service:$port');
}
+ if (serviceResponseSizesDir != null) {
+ // Dump service response size details to a CSV. This feature is not used
+ // on the build bots and the generated output will persist after the test
+ // has completed.
+ final dir = path.prettyUri(serviceResponseSizesDir);
+ final testName = path.withoutExtension(path.basename(args.last));
+ final logName = '${testName}_${useDds ? "" : "no_"}dds_sizes.csv';
+ fullArgs.add('--log_service_response_sizes=$dir/$logName');
+ }
fullArgs.addAll(args);
return _spawnCommon(dartExecutable, fullArgs, <String, String>{});
diff --git a/runtime/observatory_2/tests/service_2/test_helper.dart b/runtime/observatory_2/tests/service_2/test_helper.dart
index 86e7b13..6c782b8 100644
--- a/runtime/observatory_2/tests/service_2/test_helper.dart
+++ b/runtime/observatory_2/tests/service_2/test_helper.dart
@@ -20,6 +20,10 @@
/// Determines whether DDS is enabled for this test run.
const bool useDds = const bool.fromEnvironment('USE_DDS');
+/// The directory to output VM service response size data files to.
+const String serviceResponseSizesDir =
+ const String.fromEnvironment('SERVICE_RESPONSE_SIZES_DIR');
+
/// The extra arguments to use
const List<String> extraDebuggingArgs = ['--lazy-async-stacks'];
@@ -178,6 +182,15 @@
if (!testeeControlsServer) {
fullArgs.add('--enable-vm-service:$port');
}
+ if (serviceResponseSizesDir != null) {
+ // Dump service response size details to a CSV. This feature is not used
+ // on the build bots and the generated output will persist after the test
+ // has completed.
+ final dir = path.prettyUri(serviceResponseSizesDir);
+ final testName = path.withoutExtension(path.basename(args.last));
+ final logName = '${testName}_${useDds ? "" : "no_"}dds_sizes.csv';
+ fullArgs.add('--log_service_response_sizes=$dir/$logName');
+ }
fullArgs.addAll(args);
return _spawnCommon(dartExecutable, fullArgs, <String, String>{});
diff --git a/runtime/tests/vm/dart/isolate_exit_sandwich_test.dart b/runtime/tests/vm/dart/isolate_exit_sandwich_test.dart
new file mode 100644
index 0000000..8a49598
--- /dev/null
+++ b/runtime/tests/vm/dart/isolate_exit_sandwich_test.dart
@@ -0,0 +1,51 @@
+// 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.
+//
+// Checks that Kill message (generated for example by Isolate.exit) prevents
+// any more dart code being executed - in particular when dart code with
+// Isolate.exit() is invoked from native code, which in turns is invoked
+// from dart code(hence "sandwich"-test).
+
+import 'dart:async';
+import 'dart:ffi';
+import 'dart:io';
+import 'dart:isolate';
+
+import "package:expect/expect.dart";
+import '../../../../tests/ffi/dylib_utils.dart';
+
+final ffiTestFunctions = dlopenPlatformSpecific('ffi_test_functions');
+
+final lookupAndCallWorkerThatCallsIsolateExit =
+ ffiTestFunctions.lookupFunction<Void Function(Int64), void Function(int)>(
+ 'IsolateExitTest_LookupAndCallIsolateExit');
+
+@pragma('vm:entry-point')
+void recurseLookupAndCallWorker(int i) {
+ lookupAndCallWorkerThatCallsIsolateExit(i);
+ print(
+ 'coming back after $i invocation of lookupAndCallWorkerThatCallsIsolateExit');
+ assert(false);
+}
+
+// This method is looked up and called by ffi method that ignores unwinding
+// error raised by 'Isolate.exit'.
+@pragma('vm:entry-point')
+Never callIsolateExit() {
+ Isolate.exit();
+}
+
+main(List<String> args) async {
+ if (args.length > 0) {
+ lookupAndCallWorkerThatCallsIsolateExit(4);
+ print('got back');
+ return;
+ }
+ ProcessResult result = await Process.run(
+ Platform.executable, <String>[Platform.script.toString(), 'worker']);
+ Expect.isTrue(result.exitCode != 0);
+ // The child process should be terminated before it had a chance
+ // to print "got back".
+ Expect.isFalse(result.stdout.contains('got back'));
+}
diff --git a/runtime/tests/vm/dart/untyped_function_invocation_with_known_function_type_test.dart b/runtime/tests/vm/dart/untyped_function_invocation_with_known_function_type_test.dart
new file mode 100644
index 0000000..9c16501
--- /dev/null
+++ b/runtime/tests/vm/dart/untyped_function_invocation_with_known_function_type_test.dart
@@ -0,0 +1,27 @@
+// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Verifies that compiler doesn't crash when it sees untyped function
+// invocation (FunctionAccessKind.Function) but receiver has a known
+// function type.
+
+import "package:expect/expect.dart";
+
+bool ok = false;
+bool _defaultCheck([dynamic _]) => true;
+
+void foo<T>(bool Function(T error)? check, Object e) {
+ // Function call on the result of 'check ?? _defaultCheck' is untyped
+ // (assumes static type Function). However, AOT compiler can eliminate
+ // null test and might be able to reduce the expression to 'check' with
+ // known function type.
+ if (e is T && (check ?? _defaultCheck)(e)) {
+ ok = true;
+ }
+}
+
+void main() {
+ foo<String>((_) => true, 'hi');
+ Expect.isTrue(ok);
+}
diff --git a/runtime/tests/vm/dart_2/isolate_exit_sandwich_test.dart b/runtime/tests/vm/dart_2/isolate_exit_sandwich_test.dart
new file mode 100644
index 0000000..0b0a08c
--- /dev/null
+++ b/runtime/tests/vm/dart_2/isolate_exit_sandwich_test.dart
@@ -0,0 +1,52 @@
+// 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.
+//
+// Checks that Kill message (generated for example by Isolate.exit) prevents
+// any more dart code being executed - in particular when dart code with
+// Isolate.exit() is invoked from native code, which in turns is invoked
+// from dart code(hence "sandwich"-test).
+
+// @dart = 2.9
+
+import 'dart:async';
+import 'dart:ffi';
+import 'dart:io';
+import 'dart:isolate';
+
+import "package:expect/expect.dart";
+import '../../../../tests/ffi/dylib_utils.dart';
+
+final ffiTestFunctions = dlopenPlatformSpecific('ffi_test_functions');
+
+final lookupAndCallWorkerThatCallsIsolateExit =
+ ffiTestFunctions.lookupFunction<Void Function(Int64), void Function(int)>(
+ 'IsolateExitTest_LookupAndCallIsolateExit');
+
+@pragma('vm:entry-point')
+void recurseLookupAndCallWorker(int i) {
+ lookupAndCallWorkerThatCallsIsolateExit(i);
+ print(
+ 'coming back after $i invocation of lookupAndCallWorkerThatCallsIsolateExit');
+}
+
+// This method is looked up and called by ffi method that ignores unwinding
+// error raised by 'Isolate.exit'.
+@pragma('vm:entry-point')
+Never callIsolateExit() {
+ Isolate.exit();
+}
+
+main(List<String> args) async {
+ if (args.length > 0) {
+ lookupAndCallWorkerThatCallsIsolateExit(4);
+ print('got back');
+ return;
+ }
+ ProcessResult result = await Process.run(
+ Platform.executable, <String>[Platform.script.toString(), 'worker']);
+ Expect.isTrue(result.exitCode != 0);
+ // The child process should be terminated before it had a chance
+ // to print "got back".
+ Expect.isFalse(result.stdout.contains('got back'));
+}
diff --git a/runtime/vm/class_finalizer.cc b/runtime/vm/class_finalizer.cc
index f4d01aa..9326873 100644
--- a/runtime/vm/class_finalizer.cc
+++ b/runtime/vm/class_finalizer.cc
@@ -1226,15 +1226,16 @@
const auto& values_field =
Field::Handle(zone, enum_cls.LookupStaticField(Symbols::Values()));
- ASSERT(!values_field.IsNull() && values_field.is_static() &&
- values_field.is_const());
+ if (!values_field.IsNull()) {
+ ASSERT(values_field.is_static() && values_field.is_const());
- const auto& values =
- Object::Handle(zone, values_field.StaticConstFieldValue());
- if (values.IsError()) {
- ReportError(Error::Cast(values));
+ const auto& values =
+ Object::Handle(zone, values_field.StaticConstFieldValue());
+ if (values.IsError()) {
+ ReportError(Error::Cast(values));
+ }
+ ASSERT(values.IsArray());
}
- ASSERT(values.IsArray());
// The enum_cls is the actual declared class.
// The shared super-class holds the fields for index and name.
diff --git a/runtime/vm/compiler/assembler/assembler_arm.cc b/runtime/vm/compiler/assembler/assembler_arm.cc
index 8d265de..3aeae48 100644
--- a/runtime/vm/compiler/assembler/assembler_arm.cc
+++ b/runtime/vm/compiler/assembler/assembler_arm.cc
@@ -622,7 +622,9 @@
}
}
-void Assembler::ExitFullSafepoint(Register tmp1, Register tmp2) {
+void Assembler::ExitFullSafepoint(Register tmp1,
+ Register tmp2,
+ bool ignore_unwind_in_progress) {
Register addr = tmp1;
Register state = tmp2;
@@ -650,7 +652,14 @@
}
Bind(&slow_path);
- ldr(TMP, Address(THR, target::Thread::exit_safepoint_stub_offset()));
+ if (ignore_unwind_in_progress) {
+ ldr(TMP,
+ Address(THR,
+ target::Thread::
+ exit_safepoint_ignore_unwind_in_progress_stub_offset()));
+ } else {
+ ldr(TMP, Address(THR, target::Thread::exit_safepoint_stub_offset()));
+ }
ldr(TMP, FieldAddress(TMP, target::Code::entry_point_offset()));
blx(TMP);
@@ -659,10 +668,13 @@
void Assembler::TransitionNativeToGenerated(Register addr,
Register state,
- bool exit_safepoint) {
+ bool exit_safepoint,
+ bool ignore_unwind_in_progress) {
if (exit_safepoint) {
- ExitFullSafepoint(addr, state);
+ ExitFullSafepoint(addr, state, ignore_unwind_in_progress);
} else {
+ // flag only makes sense if we are leaving safepoint
+ ASSERT(!ignore_unwind_in_progress);
#if defined(DEBUG)
// Ensure we've already left the safepoint.
ASSERT(target::Thread::full_safepoint_state_acquired() != 0);
diff --git a/runtime/vm/compiler/assembler/assembler_arm.h b/runtime/vm/compiler/assembler/assembler_arm.h
index 457b1da..c7168c3 100644
--- a/runtime/vm/compiler/assembler/assembler_arm.h
+++ b/runtime/vm/compiler/assembler/assembler_arm.h
@@ -614,9 +614,12 @@
bool enter_safepoint);
void TransitionNativeToGenerated(Register scratch0,
Register scratch1,
- bool exit_safepoint);
+ bool exit_safepoint,
+ bool ignore_unwind_in_progress = false);
void EnterFullSafepoint(Register scratch0, Register scratch1);
- void ExitFullSafepoint(Register scratch0, Register scratch1);
+ void ExitFullSafepoint(Register scratch0,
+ Register scratch1,
+ bool ignore_unwind_in_progress);
// Miscellaneous instructions.
void clrex();
diff --git a/runtime/vm/compiler/assembler/assembler_arm64.cc b/runtime/vm/compiler/assembler/assembler_arm64.cc
index 07bcb13..5869617 100644
--- a/runtime/vm/compiler/assembler/assembler_arm64.cc
+++ b/runtime/vm/compiler/assembler/assembler_arm64.cc
@@ -1735,7 +1735,8 @@
}
}
-void Assembler::ExitFullSafepoint(Register state) {
+void Assembler::ExitFullSafepoint(Register state,
+ bool ignore_unwind_in_progress) {
// We generate the same number of instructions whether or not the slow-path is
// forced, for consistency with EnterFullSafepoint.
Register addr = TMP2;
@@ -1762,7 +1763,14 @@
}
Bind(&slow_path);
- ldr(addr, Address(THR, target::Thread::exit_safepoint_stub_offset()));
+ if (ignore_unwind_in_progress) {
+ ldr(addr,
+ Address(THR,
+ target::Thread::
+ exit_safepoint_ignore_unwind_in_progress_stub_offset()));
+ } else {
+ ldr(addr, Address(THR, target::Thread::exit_safepoint_stub_offset()));
+ }
ldr(addr, FieldAddress(addr, target::Code::entry_point_offset()));
blr(addr);
@@ -1770,10 +1778,13 @@
}
void Assembler::TransitionNativeToGenerated(Register state,
- bool exit_safepoint) {
+ bool exit_safepoint,
+ bool ignore_unwind_in_progress) {
if (exit_safepoint) {
- ExitFullSafepoint(state);
+ ExitFullSafepoint(state, ignore_unwind_in_progress);
} else {
+ // flag only makes sense if we are leaving safepoint
+ ASSERT(!ignore_unwind_in_progress);
#if defined(DEBUG)
// Ensure we've already left the safepoint.
ASSERT(target::Thread::full_safepoint_state_acquired() != 0);
diff --git a/runtime/vm/compiler/assembler/assembler_arm64.h b/runtime/vm/compiler/assembler/assembler_arm64.h
index 554f4d8..e404453 100644
--- a/runtime/vm/compiler/assembler/assembler_arm64.h
+++ b/runtime/vm/compiler/assembler/assembler_arm64.h
@@ -2054,9 +2054,11 @@
Register new_exit_frame,
Register new_exit_through_ffi,
bool enter_safepoint);
- void TransitionNativeToGenerated(Register scratch, bool exit_safepoint);
+ void TransitionNativeToGenerated(Register scratch,
+ bool exit_safepoint,
+ bool ignore_unwind_in_progress = false);
void EnterFullSafepoint(Register scratch);
- void ExitFullSafepoint(Register scratch);
+ void ExitFullSafepoint(Register scratch, bool ignore_unwind_in_progress);
void CheckCodePointer();
void RestoreCodePointer();
diff --git a/runtime/vm/compiler/assembler/assembler_ia32.cc b/runtime/vm/compiler/assembler/assembler_ia32.cc
index 459cbf2..a3b12b0 100644
--- a/runtime/vm/compiler/assembler/assembler_ia32.cc
+++ b/runtime/vm/compiler/assembler/assembler_ia32.cc
@@ -2361,7 +2361,8 @@
}
}
-void Assembler::ExitFullSafepoint(Register scratch) {
+void Assembler::ExitFullSafepoint(Register scratch,
+ bool ignore_unwind_in_progress) {
ASSERT(scratch != EAX);
// We generate the same number of instructions whether or not the slow-path is
// forced, for consistency with EnterFullSafepoint.
@@ -2386,7 +2387,14 @@
}
Bind(&slow_path);
- movl(scratch, Address(THR, target::Thread::exit_safepoint_stub_offset()));
+ if (ignore_unwind_in_progress) {
+ movl(scratch,
+ Address(THR,
+ target::Thread::
+ exit_safepoint_ignore_unwind_in_progress_stub_offset()));
+ } else {
+ movl(scratch, Address(THR, target::Thread::exit_safepoint_stub_offset()));
+ }
movl(scratch, FieldAddress(scratch, target::Code::entry_point_offset()));
call(scratch);
@@ -2394,10 +2402,13 @@
}
void Assembler::TransitionNativeToGenerated(Register scratch,
- bool exit_safepoint) {
+ bool exit_safepoint,
+ bool ignore_unwind_in_progress) {
if (exit_safepoint) {
- ExitFullSafepoint(scratch);
+ ExitFullSafepoint(scratch, ignore_unwind_in_progress);
} else {
+ // flag only makes sense if we are leaving safepoint
+ ASSERT(!ignore_unwind_in_progress);
#if defined(DEBUG)
// Ensure we've already left the safepoint.
movl(scratch, Address(THR, target::Thread::safepoint_state_offset()));
diff --git a/runtime/vm/compiler/assembler/assembler_ia32.h b/runtime/vm/compiler/assembler/assembler_ia32.h
index e5b2b1a..d5b61ee 100644
--- a/runtime/vm/compiler/assembler/assembler_ia32.h
+++ b/runtime/vm/compiler/assembler/assembler_ia32.h
@@ -819,9 +819,11 @@
Register new_exit_frame,
Register new_exit_through_ffi,
bool enter_safepoint);
- void TransitionNativeToGenerated(Register scratch, bool exit_safepoint);
+ void TransitionNativeToGenerated(Register scratch,
+ bool exit_safepoint,
+ bool ignore_unwind_in_progress = false);
void EnterFullSafepoint(Register scratch);
- void ExitFullSafepoint(Register scratch);
+ void ExitFullSafepoint(Register scratch, bool ignore_unwind_in_progress);
// Create a frame for calling into runtime that preserves all volatile
// registers. Frame's RSP is guaranteed to be correctly aligned and
diff --git a/runtime/vm/compiler/assembler/assembler_x64.cc b/runtime/vm/compiler/assembler/assembler_x64.cc
index 12398f9..a72850f 100644
--- a/runtime/vm/compiler/assembler/assembler_x64.cc
+++ b/runtime/vm/compiler/assembler/assembler_x64.cc
@@ -184,7 +184,7 @@
}
}
-void Assembler::ExitFullSafepoint() {
+void Assembler::ExitFullSafepoint(bool ignore_unwind_in_progress) {
// We generate the same number of instructions whether or not the slow-path is
// forced, for consistency with EnterFullSafepoint.
Label done, slow_path;
@@ -209,7 +209,14 @@
}
Bind(&slow_path);
- movq(TMP, Address(THR, target::Thread::exit_safepoint_stub_offset()));
+ if (ignore_unwind_in_progress) {
+ movq(TMP,
+ Address(THR,
+ target::Thread::
+ exit_safepoint_ignore_unwind_in_progress_stub_offset()));
+ } else {
+ movq(TMP, Address(THR, target::Thread::exit_safepoint_stub_offset()));
+ }
movq(TMP, FieldAddress(TMP, target::Code::entry_point_offset()));
// Use call instead of CallCFunction to avoid having to clean up shadow space
@@ -220,10 +227,13 @@
Bind(&done);
}
-void Assembler::TransitionNativeToGenerated(bool leave_safepoint) {
+void Assembler::TransitionNativeToGenerated(bool leave_safepoint,
+ bool ignore_unwind_in_progress) {
if (leave_safepoint) {
- ExitFullSafepoint();
+ ExitFullSafepoint(ignore_unwind_in_progress);
} else {
+ // flag only makes sense if we are leaving safepoint
+ ASSERT(!ignore_unwind_in_progress);
#if defined(DEBUG)
// Ensure we've already left the safepoint.
movq(TMP, Address(THR, target::Thread::safepoint_state_offset()));
diff --git a/runtime/vm/compiler/assembler/assembler_x64.h b/runtime/vm/compiler/assembler/assembler_x64.h
index 3f4bf92..dd5882c 100644
--- a/runtime/vm/compiler/assembler/assembler_x64.h
+++ b/runtime/vm/compiler/assembler/assembler_x64.h
@@ -319,12 +319,13 @@
void setcc(Condition condition, ByteRegister dst);
void EnterFullSafepoint();
- void ExitFullSafepoint();
+ void ExitFullSafepoint(bool ignore_unwind_in_progress);
void TransitionGeneratedToNative(Register destination_address,
Register new_exit_frame,
Register new_exit_through_ffi,
bool enter_safepoint);
- void TransitionNativeToGenerated(bool leave_safepoint);
+ void TransitionNativeToGenerated(bool leave_safepoint,
+ bool ignore_unwind_in_progress = false);
// Register-register, register-address and address-register instructions.
#define RR(width, name, ...) \
diff --git a/runtime/vm/compiler/assembler/assembler_x64_test.cc b/runtime/vm/compiler/assembler/assembler_x64_test.cc
index 1dded0f..761a858 100644
--- a/runtime/vm/compiler/assembler/assembler_x64_test.cc
+++ b/runtime/vm/compiler/assembler/assembler_x64_test.cc
@@ -3384,7 +3384,7 @@
EXPECT_FLOAT_EQ(-1.0, res, 0.000001f);
EXPECT_DISASSEMBLY_NOT_WINDOWS_ENDS_WITH(
"movups xmm10,[rax]\n"
- "movq r11,[thr+0x2b0]\n"
+ "movq r11,[thr+0x...]\n"
"xorpd xmm10,[r11]\n"
"movaps xmm0,xmm10\n"
"pop thr\n"
@@ -3413,7 +3413,7 @@
EXPECT_FLOAT_EQ(1.0, res, 0.000001f);
EXPECT_DISASSEMBLY_NOT_WINDOWS_ENDS_WITH(
"movups xmm10,[rax]\n"
- "movq r11,[thr+0x2b8]\n"
+ "movq r11,[thr+0x...]\n"
"movups xmm0,[r11]\n"
"andpd xmm0,xmm10\n"
"pop thr\n"
@@ -4066,7 +4066,7 @@
"movl rax,0x4144cccd\n"
"movd xmm0,rax\n"
"shufps xmm0,xmm0 [0]\n"
- "movq r11,[thr+0x2c8]\n"
+ "movq r11,[thr+0x...]\n"
"xorps xmm0,[r11]\n"
"shufps xmm0,xmm0 [aa]\n"
"pop thr\n"
@@ -4103,7 +4103,7 @@
"movl rax,-0x3e8b3333\n"
"movd xmm0,rax\n"
"shufps xmm0,xmm0 [0]\n"
- "movq r11,[thr+0x2d0]\n"
+ "movq r11,[thr+0x...]\n"
"andps xmm0,[r11]\n"
"shufps xmm0,xmm0 [aa]\n"
"pop thr\n"
@@ -4138,7 +4138,7 @@
"movl rax,0x4144cccd\n"
"movd xmm0,rax\n"
"shufps xmm0,xmm0 [0]\n"
- "movq r11,[thr+0x2d8]\n"
+ "movq r11,[thr+0x...]\n"
"andps xmm0,[r11]\n"
"shufps xmm0,xmm0 [ff]\n"
"pop thr\n"
@@ -4288,7 +4288,7 @@
EXPECT_EQ(static_cast<uword>(0x0), res);
EXPECT_DISASSEMBLY_NOT_WINDOWS_ENDS_WITH(
"movups xmm9,[rax]\n"
- "movq r11,[thr+0x2c0]\n"
+ "movq r11,[thr+0x...]\n"
"movups xmm0,[r11]\n"
"xorps xmm0,xmm9\n"
"push rax\n"
@@ -5464,7 +5464,7 @@
"movq r12,[rdi+0x8]\n"
"movq thr,rsi\n"
"movq pp,[r12+0x27]\n"
- "movq r11,[thr+0x2b8]\n"
+ "movq r11,[thr+0x...]\n"
"andpd xmm0,[r11]\n"
"pop thr\n"
"pop pp\n"
diff --git a/runtime/vm/compiler/runtime_api.h b/runtime/vm/compiler/runtime_api.h
index c7fd307..0559b8c 100644
--- a/runtime/vm/compiler/runtime_api.h
+++ b/runtime/vm/compiler/runtime_api.h
@@ -1176,6 +1176,7 @@
static word deoptimize_stub_offset();
static word enter_safepoint_stub_offset();
static word exit_safepoint_stub_offset();
+ static word exit_safepoint_ignore_unwind_in_progress_stub_offset();
static word call_native_through_safepoint_stub_offset();
static word call_native_through_safepoint_entry_point_offset();
diff --git a/runtime/vm/compiler/runtime_offsets_extracted.h b/runtime/vm/compiler/runtime_offsets_extracted.h
index 5d764cf..4784b36 100644
--- a/runtime/vm/compiler/runtime_offsets_extracted.h
+++ b/runtime/vm/compiler/runtime_offsets_extracted.h
@@ -242,93 +242,95 @@
static constexpr dart::compiler::target::word String_length_offset = 4;
static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 4;
static constexpr dart::compiler::target::word
- Thread_AllocateArray_entry_point_offset = 380;
+ Thread_AllocateArray_entry_point_offset = 384;
static constexpr dart::compiler::target::word Thread_active_exception_offset =
- 752;
+ 760;
static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
- 756;
+ 764;
static constexpr dart::compiler::target::word
Thread_array_write_barrier_code_offset = 128;
static constexpr dart::compiler::target::word
- Thread_array_write_barrier_entry_point_offset = 272;
+ Thread_array_write_barrier_entry_point_offset = 276;
static constexpr dart::compiler::target::word
- Thread_allocate_mint_with_fpu_regs_entry_point_offset = 280;
+ Thread_allocate_mint_with_fpu_regs_entry_point_offset = 284;
static constexpr dart::compiler::target::word
Thread_allocate_mint_with_fpu_regs_stub_offset = 188;
static constexpr dart::compiler::target::word
- Thread_allocate_mint_without_fpu_regs_entry_point_offset = 284;
+ Thread_allocate_mint_without_fpu_regs_entry_point_offset = 288;
static constexpr dart::compiler::target::word
Thread_allocate_mint_without_fpu_regs_stub_offset = 192;
static constexpr dart::compiler::target::word
- Thread_allocate_object_entry_point_offset = 288;
+ Thread_allocate_object_entry_point_offset = 292;
static constexpr dart::compiler::target::word
Thread_allocate_object_stub_offset = 196;
static constexpr dart::compiler::target::word
- Thread_allocate_object_parameterized_entry_point_offset = 292;
+ Thread_allocate_object_parameterized_entry_point_offset = 296;
static constexpr dart::compiler::target::word
Thread_allocate_object_parameterized_stub_offset = 200;
static constexpr dart::compiler::target::word
- Thread_allocate_object_slow_entry_point_offset = 296;
+ Thread_allocate_object_slow_entry_point_offset = 300;
static constexpr dart::compiler::target::word
Thread_allocate_object_slow_stub_offset = 204;
-static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 792;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 800;
static constexpr dart::compiler::target::word
- Thread_auto_scope_native_wrapper_entry_point_offset = 344;
+ Thread_auto_scope_native_wrapper_entry_point_offset = 348;
static constexpr dart::compiler::target::word Thread_bool_false_offset = 120;
static constexpr dart::compiler::target::word Thread_bool_true_offset = 116;
static constexpr dart::compiler::target::word
- Thread_bootstrap_native_wrapper_entry_point_offset = 336;
+ Thread_bootstrap_native_wrapper_entry_point_offset = 340;
static constexpr dart::compiler::target::word
- Thread_call_to_runtime_entry_point_offset = 276;
+ Thread_call_to_runtime_entry_point_offset = 280;
static constexpr dart::compiler::target::word
Thread_call_to_runtime_stub_offset = 144;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 816;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 824;
static constexpr dart::compiler::target::word
Thread_dispatch_table_array_offset = 44;
static constexpr dart::compiler::target::word
- Thread_double_truncate_round_supported_offset = 796;
+ Thread_double_truncate_round_supported_offset = 804;
static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
- 316;
+ 320;
static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 232;
static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
- 320;
+ 324;
static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
236;
static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
- 360;
+ 364;
static constexpr dart::compiler::target::word
- Thread_double_negate_address_offset = 356;
+ Thread_double_negate_address_offset = 360;
static constexpr dart::compiler::target::word Thread_end_offset = 52;
static constexpr dart::compiler::target::word
Thread_enter_safepoint_stub_offset = 256;
static constexpr dart::compiler::target::word Thread_execution_state_offset =
- 772;
+ 780;
static constexpr dart::compiler::target::word
Thread_exit_safepoint_stub_offset = 260;
static constexpr dart::compiler::target::word
- Thread_call_native_through_safepoint_stub_offset = 264;
+ Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 264;
static constexpr dart::compiler::target::word
- Thread_call_native_through_safepoint_entry_point_offset = 324;
+ Thread_call_native_through_safepoint_stub_offset = 268;
+static constexpr dart::compiler::target::word
+ Thread_call_native_through_safepoint_entry_point_offset = 328;
static constexpr dart::compiler::target::word
Thread_fix_allocation_stub_code_offset = 136;
static constexpr dart::compiler::target::word
Thread_fix_callers_target_code_offset = 132;
static constexpr dart::compiler::target::word
- Thread_float_absolute_address_offset = 372;
+ Thread_float_absolute_address_offset = 376;
static constexpr dart::compiler::target::word
- Thread_float_negate_address_offset = 368;
+ Thread_float_negate_address_offset = 372;
static constexpr dart::compiler::target::word Thread_float_not_address_offset =
- 364;
+ 368;
static constexpr dart::compiler::target::word
- Thread_float_zerow_address_offset = 376;
+ Thread_float_zerow_address_offset = 380;
static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
- 760;
+ 768;
static constexpr dart::compiler::target::word
Thread_invoke_dart_code_stub_offset = 140;
static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
- 788;
+ 796;
static constexpr dart::compiler::target::word Thread_isolate_offset = 40;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset = 820;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset = 828;
static constexpr dart::compiler::target::word Thread_field_table_values_offset =
64;
static constexpr dart::compiler::target::word
@@ -340,13 +342,13 @@
static constexpr dart::compiler::target::word
Thread_marking_stack_block_offset = 80;
static constexpr dart::compiler::target::word
- Thread_megamorphic_call_checked_entry_offset = 308;
+ Thread_megamorphic_call_checked_entry_offset = 312;
static constexpr dart::compiler::target::word
- Thread_switchable_call_miss_entry_offset = 312;
+ Thread_switchable_call_miss_entry_offset = 316;
static constexpr dart::compiler::target::word
Thread_switchable_call_miss_stub_offset = 216;
static constexpr dart::compiler::target::word
- Thread_no_scope_native_wrapper_entry_point_offset = 340;
+ Thread_no_scope_native_wrapper_entry_point_offset = 344;
static constexpr dart::compiler::target::word
Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 152;
static constexpr dart::compiler::target::word
@@ -369,27 +371,27 @@
Thread_range_error_shared_without_fpu_regs_stub_offset = 180;
static constexpr dart::compiler::target::word Thread_object_null_offset = 112;
static constexpr dart::compiler::target::word
- Thread_predefined_symbols_address_offset = 348;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 764;
+ Thread_predefined_symbols_address_offset = 352;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 772;
static constexpr dart::compiler::target::word
- Thread_saved_shadow_call_stack_offset = 768;
+ Thread_saved_shadow_call_stack_offset = 776;
static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
- 776;
+ 784;
static constexpr dart::compiler::target::word
Thread_slow_type_test_stub_offset = 248;
static constexpr dart::compiler::target::word
- Thread_slow_type_test_entry_point_offset = 332;
+ Thread_slow_type_test_entry_point_offset = 336;
static constexpr dart::compiler::target::word Thread_stack_limit_offset = 28;
static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
56;
static constexpr dart::compiler::target::word
Thread_stack_overflow_flags_offset = 60;
static constexpr dart::compiler::target::word
- Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 304;
+ Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 308;
static constexpr dart::compiler::target::word
Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 212;
static constexpr dart::compiler::target::word
- Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 300;
+ Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 304;
static constexpr dart::compiler::target::word
Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 208;
static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
@@ -406,17 +408,17 @@
static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
124;
static constexpr dart::compiler::target::word
- Thread_write_barrier_entry_point_offset = 268;
+ Thread_write_barrier_entry_point_offset = 272;
static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
32;
static constexpr dart::compiler::target::word Thread_heap_base_offset = 36;
-static constexpr dart::compiler::target::word Thread_callback_code_offset = 780;
+static constexpr dart::compiler::target::word Thread_callback_code_offset = 788;
static constexpr dart::compiler::target::word
- Thread_callback_stack_return_offset = 784;
-static constexpr dart::compiler::target::word Thread_random_offset = 800;
+ Thread_callback_stack_return_offset = 792;
+static constexpr dart::compiler::target::word Thread_random_offset = 808;
static constexpr dart::compiler::target::word
- Thread_jump_to_frame_entry_point_offset = 328;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 808;
+ Thread_jump_to_frame_entry_point_offset = 332;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 816;
static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
0;
static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -485,7 +487,7 @@
4, 12, 8, 16};
static constexpr dart::compiler::target::word
Thread_write_barrier_wrappers_thread_offset[] = {
- 720, 724, 728, 732, 736, -1, 740, -1, 744, 748, -1, -1, -1, -1, -1, -1};
+ 728, 732, 736, 740, 744, -1, 748, -1, 752, 756, -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_header_size = 12;
@@ -807,95 +809,97 @@
static constexpr dart::compiler::target::word String_length_offset = 8;
static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 8;
static constexpr dart::compiler::target::word
- Thread_AllocateArray_entry_point_offset = 736;
+ Thread_AllocateArray_entry_point_offset = 744;
static constexpr dart::compiler::target::word Thread_active_exception_offset =
- 1504;
+ 1520;
static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
- 1512;
+ 1528;
static constexpr dart::compiler::target::word
Thread_array_write_barrier_code_offset = 232;
static constexpr dart::compiler::target::word
- Thread_array_write_barrier_entry_point_offset = 520;
+ Thread_array_write_barrier_entry_point_offset = 528;
static constexpr dart::compiler::target::word
- Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+ Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
static constexpr dart::compiler::target::word
Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
static constexpr dart::compiler::target::word
- Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+ Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
static constexpr dart::compiler::target::word
Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
static constexpr dart::compiler::target::word
- Thread_allocate_object_entry_point_offset = 552;
+ Thread_allocate_object_entry_point_offset = 560;
static constexpr dart::compiler::target::word
Thread_allocate_object_stub_offset = 368;
static constexpr dart::compiler::target::word
- Thread_allocate_object_parameterized_entry_point_offset = 560;
+ Thread_allocate_object_parameterized_entry_point_offset = 568;
static constexpr dart::compiler::target::word
Thread_allocate_object_parameterized_stub_offset = 376;
static constexpr dart::compiler::target::word
- Thread_allocate_object_slow_entry_point_offset = 568;
+ Thread_allocate_object_slow_entry_point_offset = 576;
static constexpr dart::compiler::target::word
Thread_allocate_object_slow_stub_offset = 384;
static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
- 1584;
+ 1600;
static constexpr dart::compiler::target::word
- Thread_auto_scope_native_wrapper_entry_point_offset = 664;
+ Thread_auto_scope_native_wrapper_entry_point_offset = 672;
static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
static constexpr dart::compiler::target::word Thread_bool_true_offset = 208;
static constexpr dart::compiler::target::word
- Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+ Thread_bootstrap_native_wrapper_entry_point_offset = 656;
static constexpr dart::compiler::target::word
- Thread_call_to_runtime_entry_point_offset = 528;
+ Thread_call_to_runtime_entry_point_offset = 536;
static constexpr dart::compiler::target::word
Thread_call_to_runtime_stub_offset = 264;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1624;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1640;
static constexpr dart::compiler::target::word
Thread_dispatch_table_array_offset = 88;
static constexpr dart::compiler::target::word
- Thread_double_truncate_round_supported_offset = 1592;
+ Thread_double_truncate_round_supported_offset = 1608;
static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
- 608;
+ 616;
static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 440;
static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
- 616;
+ 624;
static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
448;
static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
- 696;
+ 704;
static constexpr dart::compiler::target::word
- Thread_double_negate_address_offset = 688;
+ Thread_double_negate_address_offset = 696;
static constexpr dart::compiler::target::word Thread_end_offset = 104;
static constexpr dart::compiler::target::word
Thread_enter_safepoint_stub_offset = 488;
static constexpr dart::compiler::target::word Thread_execution_state_offset =
- 1544;
+ 1560;
static constexpr dart::compiler::target::word
Thread_exit_safepoint_stub_offset = 496;
static constexpr dart::compiler::target::word
- Thread_call_native_through_safepoint_stub_offset = 504;
+ Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 504;
static constexpr dart::compiler::target::word
- Thread_call_native_through_safepoint_entry_point_offset = 624;
+ Thread_call_native_through_safepoint_stub_offset = 512;
+static constexpr dart::compiler::target::word
+ Thread_call_native_through_safepoint_entry_point_offset = 632;
static constexpr dart::compiler::target::word
Thread_fix_allocation_stub_code_offset = 248;
static constexpr dart::compiler::target::word
Thread_fix_callers_target_code_offset = 240;
static constexpr dart::compiler::target::word
- Thread_float_absolute_address_offset = 720;
+ Thread_float_absolute_address_offset = 728;
static constexpr dart::compiler::target::word
- Thread_float_negate_address_offset = 712;
+ Thread_float_negate_address_offset = 720;
static constexpr dart::compiler::target::word Thread_float_not_address_offset =
- 704;
+ 712;
static constexpr dart::compiler::target::word
- Thread_float_zerow_address_offset = 728;
+ Thread_float_zerow_address_offset = 736;
static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
- 1520;
+ 1536;
static constexpr dart::compiler::target::word
Thread_invoke_dart_code_stub_offset = 256;
static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
- 1576;
+ 1592;
static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
static constexpr dart::compiler::target::word Thread_isolate_group_offset =
- 1632;
+ 1648;
static constexpr dart::compiler::target::word Thread_field_table_values_offset =
128;
static constexpr dart::compiler::target::word
@@ -907,13 +911,13 @@
static constexpr dart::compiler::target::word
Thread_marking_stack_block_offset = 160;
static constexpr dart::compiler::target::word
- Thread_megamorphic_call_checked_entry_offset = 592;
+ Thread_megamorphic_call_checked_entry_offset = 600;
static constexpr dart::compiler::target::word
- Thread_switchable_call_miss_entry_offset = 600;
+ Thread_switchable_call_miss_entry_offset = 608;
static constexpr dart::compiler::target::word
Thread_switchable_call_miss_stub_offset = 408;
static constexpr dart::compiler::target::word
- Thread_no_scope_native_wrapper_entry_point_offset = 656;
+ Thread_no_scope_native_wrapper_entry_point_offset = 664;
static constexpr dart::compiler::target::word
Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
static constexpr dart::compiler::target::word
@@ -936,27 +940,27 @@
Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
static constexpr dart::compiler::target::word
- Thread_predefined_symbols_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1528;
+ Thread_predefined_symbols_address_offset = 680;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1544;
static constexpr dart::compiler::target::word
- Thread_saved_shadow_call_stack_offset = 1536;
+ Thread_saved_shadow_call_stack_offset = 1552;
static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
- 1552;
+ 1568;
static constexpr dart::compiler::target::word
Thread_slow_type_test_stub_offset = 472;
static constexpr dart::compiler::target::word
- Thread_slow_type_test_entry_point_offset = 640;
+ Thread_slow_type_test_entry_point_offset = 648;
static constexpr dart::compiler::target::word Thread_stack_limit_offset = 56;
static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
112;
static constexpr dart::compiler::target::word
Thread_stack_overflow_flags_offset = 120;
static constexpr dart::compiler::target::word
- Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+ Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
static constexpr dart::compiler::target::word
Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
static constexpr dart::compiler::target::word
- Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+ Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
static constexpr dart::compiler::target::word
Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
@@ -973,18 +977,18 @@
static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
224;
static constexpr dart::compiler::target::word
- Thread_write_barrier_entry_point_offset = 512;
+ Thread_write_barrier_entry_point_offset = 520;
static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
64;
static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
static constexpr dart::compiler::target::word Thread_callback_code_offset =
- 1560;
+ 1576;
static constexpr dart::compiler::target::word
- Thread_callback_stack_return_offset = 1568;
-static constexpr dart::compiler::target::word Thread_random_offset = 1600;
+ Thread_callback_stack_return_offset = 1584;
+static constexpr dart::compiler::target::word Thread_random_offset = 1616;
static constexpr dart::compiler::target::word
- Thread_jump_to_frame_entry_point_offset = 632;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1608;
+ Thread_jump_to_frame_entry_point_offset = 640;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1624;
static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
0;
static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -1055,8 +1059,8 @@
8, 24, 16, 32};
static constexpr dart::compiler::target::word
Thread_write_barrier_wrappers_thread_offset[] = {
- 1416, 1424, 1432, 1440, -1, -1, 1448, 1456,
- 1464, 1472, 1480, -1, 1488, 1496, -1, -1};
+ 1432, 1440, 1448, 1456, -1, -1, 1464, 1472,
+ 1480, 1488, 1496, -1, 1504, 1512, -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_header_size = 24;
@@ -1374,93 +1378,95 @@
static constexpr dart::compiler::target::word String_length_offset = 4;
static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 4;
static constexpr dart::compiler::target::word
- Thread_AllocateArray_entry_point_offset = 380;
+ Thread_AllocateArray_entry_point_offset = 384;
static constexpr dart::compiler::target::word Thread_active_exception_offset =
- 720;
+ 728;
static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
- 724;
+ 732;
static constexpr dart::compiler::target::word
Thread_array_write_barrier_code_offset = 128;
static constexpr dart::compiler::target::word
- Thread_array_write_barrier_entry_point_offset = 272;
+ Thread_array_write_barrier_entry_point_offset = 276;
static constexpr dart::compiler::target::word
- Thread_allocate_mint_with_fpu_regs_entry_point_offset = 280;
+ Thread_allocate_mint_with_fpu_regs_entry_point_offset = 284;
static constexpr dart::compiler::target::word
Thread_allocate_mint_with_fpu_regs_stub_offset = 188;
static constexpr dart::compiler::target::word
- Thread_allocate_mint_without_fpu_regs_entry_point_offset = 284;
+ Thread_allocate_mint_without_fpu_regs_entry_point_offset = 288;
static constexpr dart::compiler::target::word
Thread_allocate_mint_without_fpu_regs_stub_offset = 192;
static constexpr dart::compiler::target::word
- Thread_allocate_object_entry_point_offset = 288;
+ Thread_allocate_object_entry_point_offset = 292;
static constexpr dart::compiler::target::word
Thread_allocate_object_stub_offset = 196;
static constexpr dart::compiler::target::word
- Thread_allocate_object_parameterized_entry_point_offset = 292;
+ Thread_allocate_object_parameterized_entry_point_offset = 296;
static constexpr dart::compiler::target::word
Thread_allocate_object_parameterized_stub_offset = 200;
static constexpr dart::compiler::target::word
- Thread_allocate_object_slow_entry_point_offset = 296;
+ Thread_allocate_object_slow_entry_point_offset = 300;
static constexpr dart::compiler::target::word
Thread_allocate_object_slow_stub_offset = 204;
-static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 760;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 768;
static constexpr dart::compiler::target::word
- Thread_auto_scope_native_wrapper_entry_point_offset = 344;
+ Thread_auto_scope_native_wrapper_entry_point_offset = 348;
static constexpr dart::compiler::target::word Thread_bool_false_offset = 120;
static constexpr dart::compiler::target::word Thread_bool_true_offset = 116;
static constexpr dart::compiler::target::word
- Thread_bootstrap_native_wrapper_entry_point_offset = 336;
+ Thread_bootstrap_native_wrapper_entry_point_offset = 340;
static constexpr dart::compiler::target::word
- Thread_call_to_runtime_entry_point_offset = 276;
+ Thread_call_to_runtime_entry_point_offset = 280;
static constexpr dart::compiler::target::word
Thread_call_to_runtime_stub_offset = 144;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 784;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 792;
static constexpr dart::compiler::target::word
Thread_dispatch_table_array_offset = 44;
static constexpr dart::compiler::target::word
- Thread_double_truncate_round_supported_offset = 764;
+ Thread_double_truncate_round_supported_offset = 772;
static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
- 316;
+ 320;
static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 232;
static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
- 320;
+ 324;
static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
236;
static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
- 360;
+ 364;
static constexpr dart::compiler::target::word
- Thread_double_negate_address_offset = 356;
+ Thread_double_negate_address_offset = 360;
static constexpr dart::compiler::target::word Thread_end_offset = 52;
static constexpr dart::compiler::target::word
Thread_enter_safepoint_stub_offset = 256;
static constexpr dart::compiler::target::word Thread_execution_state_offset =
- 740;
+ 748;
static constexpr dart::compiler::target::word
Thread_exit_safepoint_stub_offset = 260;
static constexpr dart::compiler::target::word
- Thread_call_native_through_safepoint_stub_offset = 264;
+ Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 264;
static constexpr dart::compiler::target::word
- Thread_call_native_through_safepoint_entry_point_offset = 324;
+ Thread_call_native_through_safepoint_stub_offset = 268;
+static constexpr dart::compiler::target::word
+ Thread_call_native_through_safepoint_entry_point_offset = 328;
static constexpr dart::compiler::target::word
Thread_fix_allocation_stub_code_offset = 136;
static constexpr dart::compiler::target::word
Thread_fix_callers_target_code_offset = 132;
static constexpr dart::compiler::target::word
- Thread_float_absolute_address_offset = 372;
+ Thread_float_absolute_address_offset = 376;
static constexpr dart::compiler::target::word
- Thread_float_negate_address_offset = 368;
+ Thread_float_negate_address_offset = 372;
static constexpr dart::compiler::target::word Thread_float_not_address_offset =
- 364;
+ 368;
static constexpr dart::compiler::target::word
- Thread_float_zerow_address_offset = 376;
+ Thread_float_zerow_address_offset = 380;
static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
- 728;
+ 736;
static constexpr dart::compiler::target::word
Thread_invoke_dart_code_stub_offset = 140;
static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
- 756;
+ 764;
static constexpr dart::compiler::target::word Thread_isolate_offset = 40;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset = 788;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset = 796;
static constexpr dart::compiler::target::word Thread_field_table_values_offset =
64;
static constexpr dart::compiler::target::word
@@ -1472,13 +1478,13 @@
static constexpr dart::compiler::target::word
Thread_marking_stack_block_offset = 80;
static constexpr dart::compiler::target::word
- Thread_megamorphic_call_checked_entry_offset = 308;
+ Thread_megamorphic_call_checked_entry_offset = 312;
static constexpr dart::compiler::target::word
- Thread_switchable_call_miss_entry_offset = 312;
+ Thread_switchable_call_miss_entry_offset = 316;
static constexpr dart::compiler::target::word
Thread_switchable_call_miss_stub_offset = 216;
static constexpr dart::compiler::target::word
- Thread_no_scope_native_wrapper_entry_point_offset = 340;
+ Thread_no_scope_native_wrapper_entry_point_offset = 344;
static constexpr dart::compiler::target::word
Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 152;
static constexpr dart::compiler::target::word
@@ -1501,27 +1507,27 @@
Thread_range_error_shared_without_fpu_regs_stub_offset = 180;
static constexpr dart::compiler::target::word Thread_object_null_offset = 112;
static constexpr dart::compiler::target::word
- Thread_predefined_symbols_address_offset = 348;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 732;
+ Thread_predefined_symbols_address_offset = 352;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 740;
static constexpr dart::compiler::target::word
- Thread_saved_shadow_call_stack_offset = 736;
+ Thread_saved_shadow_call_stack_offset = 744;
static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
- 744;
+ 752;
static constexpr dart::compiler::target::word
Thread_slow_type_test_stub_offset = 248;
static constexpr dart::compiler::target::word
- Thread_slow_type_test_entry_point_offset = 332;
+ Thread_slow_type_test_entry_point_offset = 336;
static constexpr dart::compiler::target::word Thread_stack_limit_offset = 28;
static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
56;
static constexpr dart::compiler::target::word
Thread_stack_overflow_flags_offset = 60;
static constexpr dart::compiler::target::word
- Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 304;
+ Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 308;
static constexpr dart::compiler::target::word
Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 212;
static constexpr dart::compiler::target::word
- Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 300;
+ Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 304;
static constexpr dart::compiler::target::word
Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 208;
static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
@@ -1538,17 +1544,17 @@
static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
124;
static constexpr dart::compiler::target::word
- Thread_write_barrier_entry_point_offset = 268;
+ Thread_write_barrier_entry_point_offset = 272;
static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
32;
static constexpr dart::compiler::target::word Thread_heap_base_offset = 36;
-static constexpr dart::compiler::target::word Thread_callback_code_offset = 748;
+static constexpr dart::compiler::target::word Thread_callback_code_offset = 756;
static constexpr dart::compiler::target::word
- Thread_callback_stack_return_offset = 752;
-static constexpr dart::compiler::target::word Thread_random_offset = 768;
+ Thread_callback_stack_return_offset = 760;
+static constexpr dart::compiler::target::word Thread_random_offset = 776;
static constexpr dart::compiler::target::word
- Thread_jump_to_frame_entry_point_offset = 328;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 776;
+ Thread_jump_to_frame_entry_point_offset = 332;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 784;
static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
0;
static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -1936,95 +1942,97 @@
static constexpr dart::compiler::target::word String_length_offset = 8;
static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 8;
static constexpr dart::compiler::target::word
- Thread_AllocateArray_entry_point_offset = 736;
+ Thread_AllocateArray_entry_point_offset = 744;
static constexpr dart::compiler::target::word Thread_active_exception_offset =
- 1568;
+ 1584;
static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
- 1576;
+ 1592;
static constexpr dart::compiler::target::word
Thread_array_write_barrier_code_offset = 232;
static constexpr dart::compiler::target::word
- Thread_array_write_barrier_entry_point_offset = 520;
+ Thread_array_write_barrier_entry_point_offset = 528;
static constexpr dart::compiler::target::word
- Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+ Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
static constexpr dart::compiler::target::word
Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
static constexpr dart::compiler::target::word
- Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+ Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
static constexpr dart::compiler::target::word
Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
static constexpr dart::compiler::target::word
- Thread_allocate_object_entry_point_offset = 552;
+ Thread_allocate_object_entry_point_offset = 560;
static constexpr dart::compiler::target::word
Thread_allocate_object_stub_offset = 368;
static constexpr dart::compiler::target::word
- Thread_allocate_object_parameterized_entry_point_offset = 560;
+ Thread_allocate_object_parameterized_entry_point_offset = 568;
static constexpr dart::compiler::target::word
Thread_allocate_object_parameterized_stub_offset = 376;
static constexpr dart::compiler::target::word
- Thread_allocate_object_slow_entry_point_offset = 568;
+ Thread_allocate_object_slow_entry_point_offset = 576;
static constexpr dart::compiler::target::word
Thread_allocate_object_slow_stub_offset = 384;
static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
- 1648;
+ 1664;
static constexpr dart::compiler::target::word
- Thread_auto_scope_native_wrapper_entry_point_offset = 664;
+ Thread_auto_scope_native_wrapper_entry_point_offset = 672;
static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
static constexpr dart::compiler::target::word Thread_bool_true_offset = 208;
static constexpr dart::compiler::target::word
- Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+ Thread_bootstrap_native_wrapper_entry_point_offset = 656;
static constexpr dart::compiler::target::word
- Thread_call_to_runtime_entry_point_offset = 528;
+ Thread_call_to_runtime_entry_point_offset = 536;
static constexpr dart::compiler::target::word
Thread_call_to_runtime_stub_offset = 264;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1688;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1704;
static constexpr dart::compiler::target::word
Thread_dispatch_table_array_offset = 88;
static constexpr dart::compiler::target::word
- Thread_double_truncate_round_supported_offset = 1656;
+ Thread_double_truncate_round_supported_offset = 1672;
static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
- 608;
+ 616;
static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 440;
static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
- 616;
+ 624;
static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
448;
static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
- 696;
+ 704;
static constexpr dart::compiler::target::word
- Thread_double_negate_address_offset = 688;
+ Thread_double_negate_address_offset = 696;
static constexpr dart::compiler::target::word Thread_end_offset = 104;
static constexpr dart::compiler::target::word
Thread_enter_safepoint_stub_offset = 488;
static constexpr dart::compiler::target::word Thread_execution_state_offset =
- 1608;
+ 1624;
static constexpr dart::compiler::target::word
Thread_exit_safepoint_stub_offset = 496;
static constexpr dart::compiler::target::word
- Thread_call_native_through_safepoint_stub_offset = 504;
+ Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 504;
static constexpr dart::compiler::target::word
- Thread_call_native_through_safepoint_entry_point_offset = 624;
+ Thread_call_native_through_safepoint_stub_offset = 512;
+static constexpr dart::compiler::target::word
+ Thread_call_native_through_safepoint_entry_point_offset = 632;
static constexpr dart::compiler::target::word
Thread_fix_allocation_stub_code_offset = 248;
static constexpr dart::compiler::target::word
Thread_fix_callers_target_code_offset = 240;
static constexpr dart::compiler::target::word
- Thread_float_absolute_address_offset = 720;
+ Thread_float_absolute_address_offset = 728;
static constexpr dart::compiler::target::word
- Thread_float_negate_address_offset = 712;
+ Thread_float_negate_address_offset = 720;
static constexpr dart::compiler::target::word Thread_float_not_address_offset =
- 704;
+ 712;
static constexpr dart::compiler::target::word
- Thread_float_zerow_address_offset = 728;
+ Thread_float_zerow_address_offset = 736;
static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
- 1584;
+ 1600;
static constexpr dart::compiler::target::word
Thread_invoke_dart_code_stub_offset = 256;
static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
- 1640;
+ 1656;
static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
static constexpr dart::compiler::target::word Thread_isolate_group_offset =
- 1696;
+ 1712;
static constexpr dart::compiler::target::word Thread_field_table_values_offset =
128;
static constexpr dart::compiler::target::word
@@ -2036,13 +2044,13 @@
static constexpr dart::compiler::target::word
Thread_marking_stack_block_offset = 160;
static constexpr dart::compiler::target::word
- Thread_megamorphic_call_checked_entry_offset = 592;
+ Thread_megamorphic_call_checked_entry_offset = 600;
static constexpr dart::compiler::target::word
- Thread_switchable_call_miss_entry_offset = 600;
+ Thread_switchable_call_miss_entry_offset = 608;
static constexpr dart::compiler::target::word
Thread_switchable_call_miss_stub_offset = 408;
static constexpr dart::compiler::target::word
- Thread_no_scope_native_wrapper_entry_point_offset = 656;
+ Thread_no_scope_native_wrapper_entry_point_offset = 664;
static constexpr dart::compiler::target::word
Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
static constexpr dart::compiler::target::word
@@ -2065,27 +2073,27 @@
Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
static constexpr dart::compiler::target::word
- Thread_predefined_symbols_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1592;
+ Thread_predefined_symbols_address_offset = 680;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1608;
static constexpr dart::compiler::target::word
- Thread_saved_shadow_call_stack_offset = 1600;
+ Thread_saved_shadow_call_stack_offset = 1616;
static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
- 1616;
+ 1632;
static constexpr dart::compiler::target::word
Thread_slow_type_test_stub_offset = 472;
static constexpr dart::compiler::target::word
- Thread_slow_type_test_entry_point_offset = 640;
+ Thread_slow_type_test_entry_point_offset = 648;
static constexpr dart::compiler::target::word Thread_stack_limit_offset = 56;
static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
112;
static constexpr dart::compiler::target::word
Thread_stack_overflow_flags_offset = 120;
static constexpr dart::compiler::target::word
- Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+ Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
static constexpr dart::compiler::target::word
Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
static constexpr dart::compiler::target::word
- Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+ Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
static constexpr dart::compiler::target::word
Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
@@ -2102,18 +2110,18 @@
static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
224;
static constexpr dart::compiler::target::word
- Thread_write_barrier_entry_point_offset = 512;
+ Thread_write_barrier_entry_point_offset = 520;
static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
64;
static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
static constexpr dart::compiler::target::word Thread_callback_code_offset =
- 1624;
+ 1640;
static constexpr dart::compiler::target::word
- Thread_callback_stack_return_offset = 1632;
-static constexpr dart::compiler::target::word Thread_random_offset = 1664;
+ Thread_callback_stack_return_offset = 1648;
+static constexpr dart::compiler::target::word Thread_random_offset = 1680;
static constexpr dart::compiler::target::word
- Thread_jump_to_frame_entry_point_offset = 632;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1672;
+ Thread_jump_to_frame_entry_point_offset = 640;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1688;
static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
0;
static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -2184,9 +2192,9 @@
8, 24, 16, 32};
static constexpr dart::compiler::target::word
Thread_write_barrier_wrappers_thread_offset[] = {
- 1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496,
- 1504, 1512, 1520, 1528, -1, -1, -1, -1, 1536, 1544, -1,
- -1, 1552, 1560, 1568, -1, -1, -1, -1, -1, -1};
+ 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496, 1504, 1512,
+ 1520, 1528, 1536, 1544, -1, -1, -1, -1, 1552, 1560, -1,
+ -1, 1568, 1576, 1584, -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_header_size = 24;
@@ -2506,95 +2514,97 @@
static constexpr dart::compiler::target::word String_length_offset = 8;
static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 8;
static constexpr dart::compiler::target::word
- Thread_AllocateArray_entry_point_offset = 736;
+ Thread_AllocateArray_entry_point_offset = 744;
static constexpr dart::compiler::target::word Thread_active_exception_offset =
- 1504;
+ 1520;
static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
- 1512;
+ 1528;
static constexpr dart::compiler::target::word
Thread_array_write_barrier_code_offset = 232;
static constexpr dart::compiler::target::word
- Thread_array_write_barrier_entry_point_offset = 520;
+ Thread_array_write_barrier_entry_point_offset = 528;
static constexpr dart::compiler::target::word
- Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+ Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
static constexpr dart::compiler::target::word
Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
static constexpr dart::compiler::target::word
- Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+ Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
static constexpr dart::compiler::target::word
Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
static constexpr dart::compiler::target::word
- Thread_allocate_object_entry_point_offset = 552;
+ Thread_allocate_object_entry_point_offset = 560;
static constexpr dart::compiler::target::word
Thread_allocate_object_stub_offset = 368;
static constexpr dart::compiler::target::word
- Thread_allocate_object_parameterized_entry_point_offset = 560;
+ Thread_allocate_object_parameterized_entry_point_offset = 568;
static constexpr dart::compiler::target::word
Thread_allocate_object_parameterized_stub_offset = 376;
static constexpr dart::compiler::target::word
- Thread_allocate_object_slow_entry_point_offset = 568;
+ Thread_allocate_object_slow_entry_point_offset = 576;
static constexpr dart::compiler::target::word
Thread_allocate_object_slow_stub_offset = 384;
static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
- 1584;
+ 1600;
static constexpr dart::compiler::target::word
- Thread_auto_scope_native_wrapper_entry_point_offset = 664;
+ Thread_auto_scope_native_wrapper_entry_point_offset = 672;
static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
static constexpr dart::compiler::target::word Thread_bool_true_offset = 208;
static constexpr dart::compiler::target::word
- Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+ Thread_bootstrap_native_wrapper_entry_point_offset = 656;
static constexpr dart::compiler::target::word
- Thread_call_to_runtime_entry_point_offset = 528;
+ Thread_call_to_runtime_entry_point_offset = 536;
static constexpr dart::compiler::target::word
Thread_call_to_runtime_stub_offset = 264;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1624;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1640;
static constexpr dart::compiler::target::word
Thread_dispatch_table_array_offset = 88;
static constexpr dart::compiler::target::word
- Thread_double_truncate_round_supported_offset = 1592;
+ Thread_double_truncate_round_supported_offset = 1608;
static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
- 608;
+ 616;
static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 440;
static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
- 616;
+ 624;
static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
448;
static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
- 696;
+ 704;
static constexpr dart::compiler::target::word
- Thread_double_negate_address_offset = 688;
+ Thread_double_negate_address_offset = 696;
static constexpr dart::compiler::target::word Thread_end_offset = 104;
static constexpr dart::compiler::target::word
Thread_enter_safepoint_stub_offset = 488;
static constexpr dart::compiler::target::word Thread_execution_state_offset =
- 1544;
+ 1560;
static constexpr dart::compiler::target::word
Thread_exit_safepoint_stub_offset = 496;
static constexpr dart::compiler::target::word
- Thread_call_native_through_safepoint_stub_offset = 504;
+ Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 504;
static constexpr dart::compiler::target::word
- Thread_call_native_through_safepoint_entry_point_offset = 624;
+ Thread_call_native_through_safepoint_stub_offset = 512;
+static constexpr dart::compiler::target::word
+ Thread_call_native_through_safepoint_entry_point_offset = 632;
static constexpr dart::compiler::target::word
Thread_fix_allocation_stub_code_offset = 248;
static constexpr dart::compiler::target::word
Thread_fix_callers_target_code_offset = 240;
static constexpr dart::compiler::target::word
- Thread_float_absolute_address_offset = 720;
+ Thread_float_absolute_address_offset = 728;
static constexpr dart::compiler::target::word
- Thread_float_negate_address_offset = 712;
+ Thread_float_negate_address_offset = 720;
static constexpr dart::compiler::target::word Thread_float_not_address_offset =
- 704;
+ 712;
static constexpr dart::compiler::target::word
- Thread_float_zerow_address_offset = 728;
+ Thread_float_zerow_address_offset = 736;
static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
- 1520;
+ 1536;
static constexpr dart::compiler::target::word
Thread_invoke_dart_code_stub_offset = 256;
static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
- 1576;
+ 1592;
static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
static constexpr dart::compiler::target::word Thread_isolate_group_offset =
- 1632;
+ 1648;
static constexpr dart::compiler::target::word Thread_field_table_values_offset =
128;
static constexpr dart::compiler::target::word
@@ -2606,13 +2616,13 @@
static constexpr dart::compiler::target::word
Thread_marking_stack_block_offset = 160;
static constexpr dart::compiler::target::word
- Thread_megamorphic_call_checked_entry_offset = 592;
+ Thread_megamorphic_call_checked_entry_offset = 600;
static constexpr dart::compiler::target::word
- Thread_switchable_call_miss_entry_offset = 600;
+ Thread_switchable_call_miss_entry_offset = 608;
static constexpr dart::compiler::target::word
Thread_switchable_call_miss_stub_offset = 408;
static constexpr dart::compiler::target::word
- Thread_no_scope_native_wrapper_entry_point_offset = 656;
+ Thread_no_scope_native_wrapper_entry_point_offset = 664;
static constexpr dart::compiler::target::word
Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
static constexpr dart::compiler::target::word
@@ -2635,27 +2645,27 @@
Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
static constexpr dart::compiler::target::word
- Thread_predefined_symbols_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1528;
+ Thread_predefined_symbols_address_offset = 680;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1544;
static constexpr dart::compiler::target::word
- Thread_saved_shadow_call_stack_offset = 1536;
+ Thread_saved_shadow_call_stack_offset = 1552;
static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
- 1552;
+ 1568;
static constexpr dart::compiler::target::word
Thread_slow_type_test_stub_offset = 472;
static constexpr dart::compiler::target::word
- Thread_slow_type_test_entry_point_offset = 640;
+ Thread_slow_type_test_entry_point_offset = 648;
static constexpr dart::compiler::target::word Thread_stack_limit_offset = 56;
static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
112;
static constexpr dart::compiler::target::word
Thread_stack_overflow_flags_offset = 120;
static constexpr dart::compiler::target::word
- Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+ Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
static constexpr dart::compiler::target::word
Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
static constexpr dart::compiler::target::word
- Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+ Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
static constexpr dart::compiler::target::word
Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
@@ -2672,18 +2682,18 @@
static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
224;
static constexpr dart::compiler::target::word
- Thread_write_barrier_entry_point_offset = 512;
+ Thread_write_barrier_entry_point_offset = 520;
static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
64;
static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
static constexpr dart::compiler::target::word Thread_callback_code_offset =
- 1560;
+ 1576;
static constexpr dart::compiler::target::word
- Thread_callback_stack_return_offset = 1568;
-static constexpr dart::compiler::target::word Thread_random_offset = 1600;
+ Thread_callback_stack_return_offset = 1584;
+static constexpr dart::compiler::target::word Thread_random_offset = 1616;
static constexpr dart::compiler::target::word
- Thread_jump_to_frame_entry_point_offset = 632;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1608;
+ Thread_jump_to_frame_entry_point_offset = 640;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1624;
static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
0;
static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -2754,8 +2764,8 @@
8, 24, 16, 32};
static constexpr dart::compiler::target::word
Thread_write_barrier_wrappers_thread_offset[] = {
- 1416, 1424, 1432, 1440, -1, -1, 1448, 1456,
- 1464, 1472, 1480, -1, 1488, 1496, -1, -1};
+ 1432, 1440, 1448, 1456, -1, -1, 1464, 1472,
+ 1480, 1488, 1496, -1, 1504, 1512, -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_header_size = 16;
@@ -3075,95 +3085,97 @@
static constexpr dart::compiler::target::word String_length_offset = 8;
static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 8;
static constexpr dart::compiler::target::word
- Thread_AllocateArray_entry_point_offset = 736;
+ Thread_AllocateArray_entry_point_offset = 744;
static constexpr dart::compiler::target::word Thread_active_exception_offset =
- 1568;
+ 1584;
static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
- 1576;
+ 1592;
static constexpr dart::compiler::target::word
Thread_array_write_barrier_code_offset = 232;
static constexpr dart::compiler::target::word
- Thread_array_write_barrier_entry_point_offset = 520;
+ Thread_array_write_barrier_entry_point_offset = 528;
static constexpr dart::compiler::target::word
- Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+ Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
static constexpr dart::compiler::target::word
Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
static constexpr dart::compiler::target::word
- Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+ Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
static constexpr dart::compiler::target::word
Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
static constexpr dart::compiler::target::word
- Thread_allocate_object_entry_point_offset = 552;
+ Thread_allocate_object_entry_point_offset = 560;
static constexpr dart::compiler::target::word
Thread_allocate_object_stub_offset = 368;
static constexpr dart::compiler::target::word
- Thread_allocate_object_parameterized_entry_point_offset = 560;
+ Thread_allocate_object_parameterized_entry_point_offset = 568;
static constexpr dart::compiler::target::word
Thread_allocate_object_parameterized_stub_offset = 376;
static constexpr dart::compiler::target::word
- Thread_allocate_object_slow_entry_point_offset = 568;
+ Thread_allocate_object_slow_entry_point_offset = 576;
static constexpr dart::compiler::target::word
Thread_allocate_object_slow_stub_offset = 384;
static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
- 1648;
+ 1664;
static constexpr dart::compiler::target::word
- Thread_auto_scope_native_wrapper_entry_point_offset = 664;
+ Thread_auto_scope_native_wrapper_entry_point_offset = 672;
static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
static constexpr dart::compiler::target::word Thread_bool_true_offset = 208;
static constexpr dart::compiler::target::word
- Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+ Thread_bootstrap_native_wrapper_entry_point_offset = 656;
static constexpr dart::compiler::target::word
- Thread_call_to_runtime_entry_point_offset = 528;
+ Thread_call_to_runtime_entry_point_offset = 536;
static constexpr dart::compiler::target::word
Thread_call_to_runtime_stub_offset = 264;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1688;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1704;
static constexpr dart::compiler::target::word
Thread_dispatch_table_array_offset = 88;
static constexpr dart::compiler::target::word
- Thread_double_truncate_round_supported_offset = 1656;
+ Thread_double_truncate_round_supported_offset = 1672;
static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
- 608;
+ 616;
static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 440;
static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
- 616;
+ 624;
static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
448;
static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
- 696;
+ 704;
static constexpr dart::compiler::target::word
- Thread_double_negate_address_offset = 688;
+ Thread_double_negate_address_offset = 696;
static constexpr dart::compiler::target::word Thread_end_offset = 104;
static constexpr dart::compiler::target::word
Thread_enter_safepoint_stub_offset = 488;
static constexpr dart::compiler::target::word Thread_execution_state_offset =
- 1608;
+ 1624;
static constexpr dart::compiler::target::word
Thread_exit_safepoint_stub_offset = 496;
static constexpr dart::compiler::target::word
- Thread_call_native_through_safepoint_stub_offset = 504;
+ Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 504;
static constexpr dart::compiler::target::word
- Thread_call_native_through_safepoint_entry_point_offset = 624;
+ Thread_call_native_through_safepoint_stub_offset = 512;
+static constexpr dart::compiler::target::word
+ Thread_call_native_through_safepoint_entry_point_offset = 632;
static constexpr dart::compiler::target::word
Thread_fix_allocation_stub_code_offset = 248;
static constexpr dart::compiler::target::word
Thread_fix_callers_target_code_offset = 240;
static constexpr dart::compiler::target::word
- Thread_float_absolute_address_offset = 720;
+ Thread_float_absolute_address_offset = 728;
static constexpr dart::compiler::target::word
- Thread_float_negate_address_offset = 712;
+ Thread_float_negate_address_offset = 720;
static constexpr dart::compiler::target::word Thread_float_not_address_offset =
- 704;
+ 712;
static constexpr dart::compiler::target::word
- Thread_float_zerow_address_offset = 728;
+ Thread_float_zerow_address_offset = 736;
static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
- 1584;
+ 1600;
static constexpr dart::compiler::target::word
Thread_invoke_dart_code_stub_offset = 256;
static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
- 1640;
+ 1656;
static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
static constexpr dart::compiler::target::word Thread_isolate_group_offset =
- 1696;
+ 1712;
static constexpr dart::compiler::target::word Thread_field_table_values_offset =
128;
static constexpr dart::compiler::target::word
@@ -3175,13 +3187,13 @@
static constexpr dart::compiler::target::word
Thread_marking_stack_block_offset = 160;
static constexpr dart::compiler::target::word
- Thread_megamorphic_call_checked_entry_offset = 592;
+ Thread_megamorphic_call_checked_entry_offset = 600;
static constexpr dart::compiler::target::word
- Thread_switchable_call_miss_entry_offset = 600;
+ Thread_switchable_call_miss_entry_offset = 608;
static constexpr dart::compiler::target::word
Thread_switchable_call_miss_stub_offset = 408;
static constexpr dart::compiler::target::word
- Thread_no_scope_native_wrapper_entry_point_offset = 656;
+ Thread_no_scope_native_wrapper_entry_point_offset = 664;
static constexpr dart::compiler::target::word
Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
static constexpr dart::compiler::target::word
@@ -3204,27 +3216,27 @@
Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
static constexpr dart::compiler::target::word
- Thread_predefined_symbols_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1592;
+ Thread_predefined_symbols_address_offset = 680;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1608;
static constexpr dart::compiler::target::word
- Thread_saved_shadow_call_stack_offset = 1600;
+ Thread_saved_shadow_call_stack_offset = 1616;
static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
- 1616;
+ 1632;
static constexpr dart::compiler::target::word
Thread_slow_type_test_stub_offset = 472;
static constexpr dart::compiler::target::word
- Thread_slow_type_test_entry_point_offset = 640;
+ Thread_slow_type_test_entry_point_offset = 648;
static constexpr dart::compiler::target::word Thread_stack_limit_offset = 56;
static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
112;
static constexpr dart::compiler::target::word
Thread_stack_overflow_flags_offset = 120;
static constexpr dart::compiler::target::word
- Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+ Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
static constexpr dart::compiler::target::word
Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
static constexpr dart::compiler::target::word
- Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+ Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
static constexpr dart::compiler::target::word
Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
@@ -3241,18 +3253,18 @@
static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
224;
static constexpr dart::compiler::target::word
- Thread_write_barrier_entry_point_offset = 512;
+ Thread_write_barrier_entry_point_offset = 520;
static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
64;
static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
static constexpr dart::compiler::target::word Thread_callback_code_offset =
- 1624;
+ 1640;
static constexpr dart::compiler::target::word
- Thread_callback_stack_return_offset = 1632;
-static constexpr dart::compiler::target::word Thread_random_offset = 1664;
+ Thread_callback_stack_return_offset = 1648;
+static constexpr dart::compiler::target::word Thread_random_offset = 1680;
static constexpr dart::compiler::target::word
- Thread_jump_to_frame_entry_point_offset = 632;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1672;
+ Thread_jump_to_frame_entry_point_offset = 640;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1688;
static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
0;
static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -3323,9 +3335,9 @@
8, 24, 16, 32};
static constexpr dart::compiler::target::word
Thread_write_barrier_wrappers_thread_offset[] = {
- 1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496,
- 1504, 1512, 1520, 1528, -1, -1, -1, -1, 1536, 1544, -1,
- -1, 1552, 1560, 1568, -1, -1, -1, -1, -1, -1};
+ 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496, 1504, 1512,
+ 1520, 1528, 1536, 1544, -1, -1, -1, -1, 1552, 1560, -1,
+ -1, 1568, 1576, 1584, -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_header_size = 16;
@@ -3639,93 +3651,95 @@
static constexpr dart::compiler::target::word String_length_offset = 4;
static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 4;
static constexpr dart::compiler::target::word
- Thread_AllocateArray_entry_point_offset = 380;
+ Thread_AllocateArray_entry_point_offset = 384;
static constexpr dart::compiler::target::word Thread_active_exception_offset =
- 752;
+ 760;
static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
- 756;
+ 764;
static constexpr dart::compiler::target::word
Thread_array_write_barrier_code_offset = 128;
static constexpr dart::compiler::target::word
- Thread_array_write_barrier_entry_point_offset = 272;
+ Thread_array_write_barrier_entry_point_offset = 276;
static constexpr dart::compiler::target::word
- Thread_allocate_mint_with_fpu_regs_entry_point_offset = 280;
+ Thread_allocate_mint_with_fpu_regs_entry_point_offset = 284;
static constexpr dart::compiler::target::word
Thread_allocate_mint_with_fpu_regs_stub_offset = 188;
static constexpr dart::compiler::target::word
- Thread_allocate_mint_without_fpu_regs_entry_point_offset = 284;
+ Thread_allocate_mint_without_fpu_regs_entry_point_offset = 288;
static constexpr dart::compiler::target::word
Thread_allocate_mint_without_fpu_regs_stub_offset = 192;
static constexpr dart::compiler::target::word
- Thread_allocate_object_entry_point_offset = 288;
+ Thread_allocate_object_entry_point_offset = 292;
static constexpr dart::compiler::target::word
Thread_allocate_object_stub_offset = 196;
static constexpr dart::compiler::target::word
- Thread_allocate_object_parameterized_entry_point_offset = 292;
+ Thread_allocate_object_parameterized_entry_point_offset = 296;
static constexpr dart::compiler::target::word
Thread_allocate_object_parameterized_stub_offset = 200;
static constexpr dart::compiler::target::word
- Thread_allocate_object_slow_entry_point_offset = 296;
+ Thread_allocate_object_slow_entry_point_offset = 300;
static constexpr dart::compiler::target::word
Thread_allocate_object_slow_stub_offset = 204;
-static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 792;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 800;
static constexpr dart::compiler::target::word
- Thread_auto_scope_native_wrapper_entry_point_offset = 344;
+ Thread_auto_scope_native_wrapper_entry_point_offset = 348;
static constexpr dart::compiler::target::word Thread_bool_false_offset = 120;
static constexpr dart::compiler::target::word Thread_bool_true_offset = 116;
static constexpr dart::compiler::target::word
- Thread_bootstrap_native_wrapper_entry_point_offset = 336;
+ Thread_bootstrap_native_wrapper_entry_point_offset = 340;
static constexpr dart::compiler::target::word
- Thread_call_to_runtime_entry_point_offset = 276;
+ Thread_call_to_runtime_entry_point_offset = 280;
static constexpr dart::compiler::target::word
Thread_call_to_runtime_stub_offset = 144;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 816;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 824;
static constexpr dart::compiler::target::word
Thread_dispatch_table_array_offset = 44;
static constexpr dart::compiler::target::word
- Thread_double_truncate_round_supported_offset = 796;
+ Thread_double_truncate_round_supported_offset = 804;
static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
- 316;
+ 320;
static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 232;
static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
- 320;
+ 324;
static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
236;
static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
- 360;
+ 364;
static constexpr dart::compiler::target::word
- Thread_double_negate_address_offset = 356;
+ Thread_double_negate_address_offset = 360;
static constexpr dart::compiler::target::word Thread_end_offset = 52;
static constexpr dart::compiler::target::word
Thread_enter_safepoint_stub_offset = 256;
static constexpr dart::compiler::target::word Thread_execution_state_offset =
- 772;
+ 780;
static constexpr dart::compiler::target::word
Thread_exit_safepoint_stub_offset = 260;
static constexpr dart::compiler::target::word
- Thread_call_native_through_safepoint_stub_offset = 264;
+ Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 264;
static constexpr dart::compiler::target::word
- Thread_call_native_through_safepoint_entry_point_offset = 324;
+ Thread_call_native_through_safepoint_stub_offset = 268;
+static constexpr dart::compiler::target::word
+ Thread_call_native_through_safepoint_entry_point_offset = 328;
static constexpr dart::compiler::target::word
Thread_fix_allocation_stub_code_offset = 136;
static constexpr dart::compiler::target::word
Thread_fix_callers_target_code_offset = 132;
static constexpr dart::compiler::target::word
- Thread_float_absolute_address_offset = 372;
+ Thread_float_absolute_address_offset = 376;
static constexpr dart::compiler::target::word
- Thread_float_negate_address_offset = 368;
+ Thread_float_negate_address_offset = 372;
static constexpr dart::compiler::target::word Thread_float_not_address_offset =
- 364;
+ 368;
static constexpr dart::compiler::target::word
- Thread_float_zerow_address_offset = 376;
+ Thread_float_zerow_address_offset = 380;
static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
- 760;
+ 768;
static constexpr dart::compiler::target::word
Thread_invoke_dart_code_stub_offset = 140;
static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
- 788;
+ 796;
static constexpr dart::compiler::target::word Thread_isolate_offset = 40;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset = 820;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset = 828;
static constexpr dart::compiler::target::word Thread_field_table_values_offset =
64;
static constexpr dart::compiler::target::word
@@ -3737,13 +3751,13 @@
static constexpr dart::compiler::target::word
Thread_marking_stack_block_offset = 80;
static constexpr dart::compiler::target::word
- Thread_megamorphic_call_checked_entry_offset = 308;
+ Thread_megamorphic_call_checked_entry_offset = 312;
static constexpr dart::compiler::target::word
- Thread_switchable_call_miss_entry_offset = 312;
+ Thread_switchable_call_miss_entry_offset = 316;
static constexpr dart::compiler::target::word
Thread_switchable_call_miss_stub_offset = 216;
static constexpr dart::compiler::target::word
- Thread_no_scope_native_wrapper_entry_point_offset = 340;
+ Thread_no_scope_native_wrapper_entry_point_offset = 344;
static constexpr dart::compiler::target::word
Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 152;
static constexpr dart::compiler::target::word
@@ -3766,27 +3780,27 @@
Thread_range_error_shared_without_fpu_regs_stub_offset = 180;
static constexpr dart::compiler::target::word Thread_object_null_offset = 112;
static constexpr dart::compiler::target::word
- Thread_predefined_symbols_address_offset = 348;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 764;
+ Thread_predefined_symbols_address_offset = 352;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 772;
static constexpr dart::compiler::target::word
- Thread_saved_shadow_call_stack_offset = 768;
+ Thread_saved_shadow_call_stack_offset = 776;
static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
- 776;
+ 784;
static constexpr dart::compiler::target::word
Thread_slow_type_test_stub_offset = 248;
static constexpr dart::compiler::target::word
- Thread_slow_type_test_entry_point_offset = 332;
+ Thread_slow_type_test_entry_point_offset = 336;
static constexpr dart::compiler::target::word Thread_stack_limit_offset = 28;
static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
56;
static constexpr dart::compiler::target::word
Thread_stack_overflow_flags_offset = 60;
static constexpr dart::compiler::target::word
- Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 304;
+ Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 308;
static constexpr dart::compiler::target::word
Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 212;
static constexpr dart::compiler::target::word
- Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 300;
+ Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 304;
static constexpr dart::compiler::target::word
Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 208;
static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
@@ -3803,17 +3817,17 @@
static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
124;
static constexpr dart::compiler::target::word
- Thread_write_barrier_entry_point_offset = 268;
+ Thread_write_barrier_entry_point_offset = 272;
static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
32;
static constexpr dart::compiler::target::word Thread_heap_base_offset = 36;
-static constexpr dart::compiler::target::word Thread_callback_code_offset = 780;
+static constexpr dart::compiler::target::word Thread_callback_code_offset = 788;
static constexpr dart::compiler::target::word
- Thread_callback_stack_return_offset = 784;
-static constexpr dart::compiler::target::word Thread_random_offset = 800;
+ Thread_callback_stack_return_offset = 792;
+static constexpr dart::compiler::target::word Thread_random_offset = 808;
static constexpr dart::compiler::target::word
- Thread_jump_to_frame_entry_point_offset = 328;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 808;
+ Thread_jump_to_frame_entry_point_offset = 332;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 816;
static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
0;
static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -3882,7 +3896,7 @@
4, 12, 8, 16};
static constexpr dart::compiler::target::word
Thread_write_barrier_wrappers_thread_offset[] = {
- 720, 724, 728, 732, 736, -1, 740, -1, 744, 748, -1, -1, -1, -1, -1, -1};
+ 728, 732, 736, 740, 744, -1, 748, -1, 752, 756, -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_header_size = 12;
@@ -4198,95 +4212,97 @@
static constexpr dart::compiler::target::word String_length_offset = 8;
static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 8;
static constexpr dart::compiler::target::word
- Thread_AllocateArray_entry_point_offset = 736;
+ Thread_AllocateArray_entry_point_offset = 744;
static constexpr dart::compiler::target::word Thread_active_exception_offset =
- 1504;
+ 1520;
static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
- 1512;
+ 1528;
static constexpr dart::compiler::target::word
Thread_array_write_barrier_code_offset = 232;
static constexpr dart::compiler::target::word
- Thread_array_write_barrier_entry_point_offset = 520;
+ Thread_array_write_barrier_entry_point_offset = 528;
static constexpr dart::compiler::target::word
- Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+ Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
static constexpr dart::compiler::target::word
Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
static constexpr dart::compiler::target::word
- Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+ Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
static constexpr dart::compiler::target::word
Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
static constexpr dart::compiler::target::word
- Thread_allocate_object_entry_point_offset = 552;
+ Thread_allocate_object_entry_point_offset = 560;
static constexpr dart::compiler::target::word
Thread_allocate_object_stub_offset = 368;
static constexpr dart::compiler::target::word
- Thread_allocate_object_parameterized_entry_point_offset = 560;
+ Thread_allocate_object_parameterized_entry_point_offset = 568;
static constexpr dart::compiler::target::word
Thread_allocate_object_parameterized_stub_offset = 376;
static constexpr dart::compiler::target::word
- Thread_allocate_object_slow_entry_point_offset = 568;
+ Thread_allocate_object_slow_entry_point_offset = 576;
static constexpr dart::compiler::target::word
Thread_allocate_object_slow_stub_offset = 384;
static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
- 1584;
+ 1600;
static constexpr dart::compiler::target::word
- Thread_auto_scope_native_wrapper_entry_point_offset = 664;
+ Thread_auto_scope_native_wrapper_entry_point_offset = 672;
static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
static constexpr dart::compiler::target::word Thread_bool_true_offset = 208;
static constexpr dart::compiler::target::word
- Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+ Thread_bootstrap_native_wrapper_entry_point_offset = 656;
static constexpr dart::compiler::target::word
- Thread_call_to_runtime_entry_point_offset = 528;
+ Thread_call_to_runtime_entry_point_offset = 536;
static constexpr dart::compiler::target::word
Thread_call_to_runtime_stub_offset = 264;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1624;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1640;
static constexpr dart::compiler::target::word
Thread_dispatch_table_array_offset = 88;
static constexpr dart::compiler::target::word
- Thread_double_truncate_round_supported_offset = 1592;
+ Thread_double_truncate_round_supported_offset = 1608;
static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
- 608;
+ 616;
static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 440;
static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
- 616;
+ 624;
static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
448;
static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
- 696;
+ 704;
static constexpr dart::compiler::target::word
- Thread_double_negate_address_offset = 688;
+ Thread_double_negate_address_offset = 696;
static constexpr dart::compiler::target::word Thread_end_offset = 104;
static constexpr dart::compiler::target::word
Thread_enter_safepoint_stub_offset = 488;
static constexpr dart::compiler::target::word Thread_execution_state_offset =
- 1544;
+ 1560;
static constexpr dart::compiler::target::word
Thread_exit_safepoint_stub_offset = 496;
static constexpr dart::compiler::target::word
- Thread_call_native_through_safepoint_stub_offset = 504;
+ Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 504;
static constexpr dart::compiler::target::word
- Thread_call_native_through_safepoint_entry_point_offset = 624;
+ Thread_call_native_through_safepoint_stub_offset = 512;
+static constexpr dart::compiler::target::word
+ Thread_call_native_through_safepoint_entry_point_offset = 632;
static constexpr dart::compiler::target::word
Thread_fix_allocation_stub_code_offset = 248;
static constexpr dart::compiler::target::word
Thread_fix_callers_target_code_offset = 240;
static constexpr dart::compiler::target::word
- Thread_float_absolute_address_offset = 720;
+ Thread_float_absolute_address_offset = 728;
static constexpr dart::compiler::target::word
- Thread_float_negate_address_offset = 712;
+ Thread_float_negate_address_offset = 720;
static constexpr dart::compiler::target::word Thread_float_not_address_offset =
- 704;
+ 712;
static constexpr dart::compiler::target::word
- Thread_float_zerow_address_offset = 728;
+ Thread_float_zerow_address_offset = 736;
static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
- 1520;
+ 1536;
static constexpr dart::compiler::target::word
Thread_invoke_dart_code_stub_offset = 256;
static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
- 1576;
+ 1592;
static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
static constexpr dart::compiler::target::word Thread_isolate_group_offset =
- 1632;
+ 1648;
static constexpr dart::compiler::target::word Thread_field_table_values_offset =
128;
static constexpr dart::compiler::target::word
@@ -4298,13 +4314,13 @@
static constexpr dart::compiler::target::word
Thread_marking_stack_block_offset = 160;
static constexpr dart::compiler::target::word
- Thread_megamorphic_call_checked_entry_offset = 592;
+ Thread_megamorphic_call_checked_entry_offset = 600;
static constexpr dart::compiler::target::word
- Thread_switchable_call_miss_entry_offset = 600;
+ Thread_switchable_call_miss_entry_offset = 608;
static constexpr dart::compiler::target::word
Thread_switchable_call_miss_stub_offset = 408;
static constexpr dart::compiler::target::word
- Thread_no_scope_native_wrapper_entry_point_offset = 656;
+ Thread_no_scope_native_wrapper_entry_point_offset = 664;
static constexpr dart::compiler::target::word
Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
static constexpr dart::compiler::target::word
@@ -4327,27 +4343,27 @@
Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
static constexpr dart::compiler::target::word
- Thread_predefined_symbols_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1528;
+ Thread_predefined_symbols_address_offset = 680;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1544;
static constexpr dart::compiler::target::word
- Thread_saved_shadow_call_stack_offset = 1536;
+ Thread_saved_shadow_call_stack_offset = 1552;
static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
- 1552;
+ 1568;
static constexpr dart::compiler::target::word
Thread_slow_type_test_stub_offset = 472;
static constexpr dart::compiler::target::word
- Thread_slow_type_test_entry_point_offset = 640;
+ Thread_slow_type_test_entry_point_offset = 648;
static constexpr dart::compiler::target::word Thread_stack_limit_offset = 56;
static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
112;
static constexpr dart::compiler::target::word
Thread_stack_overflow_flags_offset = 120;
static constexpr dart::compiler::target::word
- Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+ Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
static constexpr dart::compiler::target::word
Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
static constexpr dart::compiler::target::word
- Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+ Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
static constexpr dart::compiler::target::word
Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
@@ -4364,18 +4380,18 @@
static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
224;
static constexpr dart::compiler::target::word
- Thread_write_barrier_entry_point_offset = 512;
+ Thread_write_barrier_entry_point_offset = 520;
static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
64;
static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
static constexpr dart::compiler::target::word Thread_callback_code_offset =
- 1560;
+ 1576;
static constexpr dart::compiler::target::word
- Thread_callback_stack_return_offset = 1568;
-static constexpr dart::compiler::target::word Thread_random_offset = 1600;
+ Thread_callback_stack_return_offset = 1584;
+static constexpr dart::compiler::target::word Thread_random_offset = 1616;
static constexpr dart::compiler::target::word
- Thread_jump_to_frame_entry_point_offset = 632;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1608;
+ Thread_jump_to_frame_entry_point_offset = 640;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1624;
static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
0;
static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -4446,8 +4462,8 @@
8, 24, 16, 32};
static constexpr dart::compiler::target::word
Thread_write_barrier_wrappers_thread_offset[] = {
- 1416, 1424, 1432, 1440, -1, -1, 1448, 1456,
- 1464, 1472, 1480, -1, 1488, 1496, -1, -1};
+ 1432, 1440, 1448, 1456, -1, -1, 1464, 1472,
+ 1480, 1488, 1496, -1, 1504, 1512, -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_header_size = 24;
@@ -4759,93 +4775,95 @@
static constexpr dart::compiler::target::word String_length_offset = 4;
static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 4;
static constexpr dart::compiler::target::word
- Thread_AllocateArray_entry_point_offset = 380;
+ Thread_AllocateArray_entry_point_offset = 384;
static constexpr dart::compiler::target::word Thread_active_exception_offset =
- 720;
+ 728;
static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
- 724;
+ 732;
static constexpr dart::compiler::target::word
Thread_array_write_barrier_code_offset = 128;
static constexpr dart::compiler::target::word
- Thread_array_write_barrier_entry_point_offset = 272;
+ Thread_array_write_barrier_entry_point_offset = 276;
static constexpr dart::compiler::target::word
- Thread_allocate_mint_with_fpu_regs_entry_point_offset = 280;
+ Thread_allocate_mint_with_fpu_regs_entry_point_offset = 284;
static constexpr dart::compiler::target::word
Thread_allocate_mint_with_fpu_regs_stub_offset = 188;
static constexpr dart::compiler::target::word
- Thread_allocate_mint_without_fpu_regs_entry_point_offset = 284;
+ Thread_allocate_mint_without_fpu_regs_entry_point_offset = 288;
static constexpr dart::compiler::target::word
Thread_allocate_mint_without_fpu_regs_stub_offset = 192;
static constexpr dart::compiler::target::word
- Thread_allocate_object_entry_point_offset = 288;
+ Thread_allocate_object_entry_point_offset = 292;
static constexpr dart::compiler::target::word
Thread_allocate_object_stub_offset = 196;
static constexpr dart::compiler::target::word
- Thread_allocate_object_parameterized_entry_point_offset = 292;
+ Thread_allocate_object_parameterized_entry_point_offset = 296;
static constexpr dart::compiler::target::word
Thread_allocate_object_parameterized_stub_offset = 200;
static constexpr dart::compiler::target::word
- Thread_allocate_object_slow_entry_point_offset = 296;
+ Thread_allocate_object_slow_entry_point_offset = 300;
static constexpr dart::compiler::target::word
Thread_allocate_object_slow_stub_offset = 204;
-static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 760;
+static constexpr dart::compiler::target::word Thread_api_top_scope_offset = 768;
static constexpr dart::compiler::target::word
- Thread_auto_scope_native_wrapper_entry_point_offset = 344;
+ Thread_auto_scope_native_wrapper_entry_point_offset = 348;
static constexpr dart::compiler::target::word Thread_bool_false_offset = 120;
static constexpr dart::compiler::target::word Thread_bool_true_offset = 116;
static constexpr dart::compiler::target::word
- Thread_bootstrap_native_wrapper_entry_point_offset = 336;
+ Thread_bootstrap_native_wrapper_entry_point_offset = 340;
static constexpr dart::compiler::target::word
- Thread_call_to_runtime_entry_point_offset = 276;
+ Thread_call_to_runtime_entry_point_offset = 280;
static constexpr dart::compiler::target::word
Thread_call_to_runtime_stub_offset = 144;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 784;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 792;
static constexpr dart::compiler::target::word
Thread_dispatch_table_array_offset = 44;
static constexpr dart::compiler::target::word
- Thread_double_truncate_round_supported_offset = 764;
+ Thread_double_truncate_round_supported_offset = 772;
static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
- 316;
+ 320;
static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 232;
static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
- 320;
+ 324;
static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
236;
static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
- 360;
+ 364;
static constexpr dart::compiler::target::word
- Thread_double_negate_address_offset = 356;
+ Thread_double_negate_address_offset = 360;
static constexpr dart::compiler::target::word Thread_end_offset = 52;
static constexpr dart::compiler::target::word
Thread_enter_safepoint_stub_offset = 256;
static constexpr dart::compiler::target::word Thread_execution_state_offset =
- 740;
+ 748;
static constexpr dart::compiler::target::word
Thread_exit_safepoint_stub_offset = 260;
static constexpr dart::compiler::target::word
- Thread_call_native_through_safepoint_stub_offset = 264;
+ Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 264;
static constexpr dart::compiler::target::word
- Thread_call_native_through_safepoint_entry_point_offset = 324;
+ Thread_call_native_through_safepoint_stub_offset = 268;
+static constexpr dart::compiler::target::word
+ Thread_call_native_through_safepoint_entry_point_offset = 328;
static constexpr dart::compiler::target::word
Thread_fix_allocation_stub_code_offset = 136;
static constexpr dart::compiler::target::word
Thread_fix_callers_target_code_offset = 132;
static constexpr dart::compiler::target::word
- Thread_float_absolute_address_offset = 372;
+ Thread_float_absolute_address_offset = 376;
static constexpr dart::compiler::target::word
- Thread_float_negate_address_offset = 368;
+ Thread_float_negate_address_offset = 372;
static constexpr dart::compiler::target::word Thread_float_not_address_offset =
- 364;
+ 368;
static constexpr dart::compiler::target::word
- Thread_float_zerow_address_offset = 376;
+ Thread_float_zerow_address_offset = 380;
static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
- 728;
+ 736;
static constexpr dart::compiler::target::word
Thread_invoke_dart_code_stub_offset = 140;
static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
- 756;
+ 764;
static constexpr dart::compiler::target::word Thread_isolate_offset = 40;
-static constexpr dart::compiler::target::word Thread_isolate_group_offset = 788;
+static constexpr dart::compiler::target::word Thread_isolate_group_offset = 796;
static constexpr dart::compiler::target::word Thread_field_table_values_offset =
64;
static constexpr dart::compiler::target::word
@@ -4857,13 +4875,13 @@
static constexpr dart::compiler::target::word
Thread_marking_stack_block_offset = 80;
static constexpr dart::compiler::target::word
- Thread_megamorphic_call_checked_entry_offset = 308;
+ Thread_megamorphic_call_checked_entry_offset = 312;
static constexpr dart::compiler::target::word
- Thread_switchable_call_miss_entry_offset = 312;
+ Thread_switchable_call_miss_entry_offset = 316;
static constexpr dart::compiler::target::word
Thread_switchable_call_miss_stub_offset = 216;
static constexpr dart::compiler::target::word
- Thread_no_scope_native_wrapper_entry_point_offset = 340;
+ Thread_no_scope_native_wrapper_entry_point_offset = 344;
static constexpr dart::compiler::target::word
Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 152;
static constexpr dart::compiler::target::word
@@ -4886,27 +4904,27 @@
Thread_range_error_shared_without_fpu_regs_stub_offset = 180;
static constexpr dart::compiler::target::word Thread_object_null_offset = 112;
static constexpr dart::compiler::target::word
- Thread_predefined_symbols_address_offset = 348;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 732;
+ Thread_predefined_symbols_address_offset = 352;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 740;
static constexpr dart::compiler::target::word
- Thread_saved_shadow_call_stack_offset = 736;
+ Thread_saved_shadow_call_stack_offset = 744;
static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
- 744;
+ 752;
static constexpr dart::compiler::target::word
Thread_slow_type_test_stub_offset = 248;
static constexpr dart::compiler::target::word
- Thread_slow_type_test_entry_point_offset = 332;
+ Thread_slow_type_test_entry_point_offset = 336;
static constexpr dart::compiler::target::word Thread_stack_limit_offset = 28;
static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
56;
static constexpr dart::compiler::target::word
Thread_stack_overflow_flags_offset = 60;
static constexpr dart::compiler::target::word
- Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 304;
+ Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 308;
static constexpr dart::compiler::target::word
Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 212;
static constexpr dart::compiler::target::word
- Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 300;
+ Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 304;
static constexpr dart::compiler::target::word
Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 208;
static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
@@ -4923,17 +4941,17 @@
static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
124;
static constexpr dart::compiler::target::word
- Thread_write_barrier_entry_point_offset = 268;
+ Thread_write_barrier_entry_point_offset = 272;
static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
32;
static constexpr dart::compiler::target::word Thread_heap_base_offset = 36;
-static constexpr dart::compiler::target::word Thread_callback_code_offset = 748;
+static constexpr dart::compiler::target::word Thread_callback_code_offset = 756;
static constexpr dart::compiler::target::word
- Thread_callback_stack_return_offset = 752;
-static constexpr dart::compiler::target::word Thread_random_offset = 768;
+ Thread_callback_stack_return_offset = 760;
+static constexpr dart::compiler::target::word Thread_random_offset = 776;
static constexpr dart::compiler::target::word
- Thread_jump_to_frame_entry_point_offset = 328;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 776;
+ Thread_jump_to_frame_entry_point_offset = 332;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 784;
static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
0;
static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -5315,95 +5333,97 @@
static constexpr dart::compiler::target::word String_length_offset = 8;
static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 8;
static constexpr dart::compiler::target::word
- Thread_AllocateArray_entry_point_offset = 736;
+ Thread_AllocateArray_entry_point_offset = 744;
static constexpr dart::compiler::target::word Thread_active_exception_offset =
- 1568;
+ 1584;
static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
- 1576;
+ 1592;
static constexpr dart::compiler::target::word
Thread_array_write_barrier_code_offset = 232;
static constexpr dart::compiler::target::word
- Thread_array_write_barrier_entry_point_offset = 520;
+ Thread_array_write_barrier_entry_point_offset = 528;
static constexpr dart::compiler::target::word
- Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+ Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
static constexpr dart::compiler::target::word
Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
static constexpr dart::compiler::target::word
- Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+ Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
static constexpr dart::compiler::target::word
Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
static constexpr dart::compiler::target::word
- Thread_allocate_object_entry_point_offset = 552;
+ Thread_allocate_object_entry_point_offset = 560;
static constexpr dart::compiler::target::word
Thread_allocate_object_stub_offset = 368;
static constexpr dart::compiler::target::word
- Thread_allocate_object_parameterized_entry_point_offset = 560;
+ Thread_allocate_object_parameterized_entry_point_offset = 568;
static constexpr dart::compiler::target::word
Thread_allocate_object_parameterized_stub_offset = 376;
static constexpr dart::compiler::target::word
- Thread_allocate_object_slow_entry_point_offset = 568;
+ Thread_allocate_object_slow_entry_point_offset = 576;
static constexpr dart::compiler::target::word
Thread_allocate_object_slow_stub_offset = 384;
static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
- 1648;
+ 1664;
static constexpr dart::compiler::target::word
- Thread_auto_scope_native_wrapper_entry_point_offset = 664;
+ Thread_auto_scope_native_wrapper_entry_point_offset = 672;
static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
static constexpr dart::compiler::target::word Thread_bool_true_offset = 208;
static constexpr dart::compiler::target::word
- Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+ Thread_bootstrap_native_wrapper_entry_point_offset = 656;
static constexpr dart::compiler::target::word
- Thread_call_to_runtime_entry_point_offset = 528;
+ Thread_call_to_runtime_entry_point_offset = 536;
static constexpr dart::compiler::target::word
Thread_call_to_runtime_stub_offset = 264;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1688;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1704;
static constexpr dart::compiler::target::word
Thread_dispatch_table_array_offset = 88;
static constexpr dart::compiler::target::word
- Thread_double_truncate_round_supported_offset = 1656;
+ Thread_double_truncate_round_supported_offset = 1672;
static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
- 608;
+ 616;
static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 440;
static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
- 616;
+ 624;
static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
448;
static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
- 696;
+ 704;
static constexpr dart::compiler::target::word
- Thread_double_negate_address_offset = 688;
+ Thread_double_negate_address_offset = 696;
static constexpr dart::compiler::target::word Thread_end_offset = 104;
static constexpr dart::compiler::target::word
Thread_enter_safepoint_stub_offset = 488;
static constexpr dart::compiler::target::word Thread_execution_state_offset =
- 1608;
+ 1624;
static constexpr dart::compiler::target::word
Thread_exit_safepoint_stub_offset = 496;
static constexpr dart::compiler::target::word
- Thread_call_native_through_safepoint_stub_offset = 504;
+ Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 504;
static constexpr dart::compiler::target::word
- Thread_call_native_through_safepoint_entry_point_offset = 624;
+ Thread_call_native_through_safepoint_stub_offset = 512;
+static constexpr dart::compiler::target::word
+ Thread_call_native_through_safepoint_entry_point_offset = 632;
static constexpr dart::compiler::target::word
Thread_fix_allocation_stub_code_offset = 248;
static constexpr dart::compiler::target::word
Thread_fix_callers_target_code_offset = 240;
static constexpr dart::compiler::target::word
- Thread_float_absolute_address_offset = 720;
+ Thread_float_absolute_address_offset = 728;
static constexpr dart::compiler::target::word
- Thread_float_negate_address_offset = 712;
+ Thread_float_negate_address_offset = 720;
static constexpr dart::compiler::target::word Thread_float_not_address_offset =
- 704;
+ 712;
static constexpr dart::compiler::target::word
- Thread_float_zerow_address_offset = 728;
+ Thread_float_zerow_address_offset = 736;
static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
- 1584;
+ 1600;
static constexpr dart::compiler::target::word
Thread_invoke_dart_code_stub_offset = 256;
static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
- 1640;
+ 1656;
static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
static constexpr dart::compiler::target::word Thread_isolate_group_offset =
- 1696;
+ 1712;
static constexpr dart::compiler::target::word Thread_field_table_values_offset =
128;
static constexpr dart::compiler::target::word
@@ -5415,13 +5435,13 @@
static constexpr dart::compiler::target::word
Thread_marking_stack_block_offset = 160;
static constexpr dart::compiler::target::word
- Thread_megamorphic_call_checked_entry_offset = 592;
+ Thread_megamorphic_call_checked_entry_offset = 600;
static constexpr dart::compiler::target::word
- Thread_switchable_call_miss_entry_offset = 600;
+ Thread_switchable_call_miss_entry_offset = 608;
static constexpr dart::compiler::target::word
Thread_switchable_call_miss_stub_offset = 408;
static constexpr dart::compiler::target::word
- Thread_no_scope_native_wrapper_entry_point_offset = 656;
+ Thread_no_scope_native_wrapper_entry_point_offset = 664;
static constexpr dart::compiler::target::word
Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
static constexpr dart::compiler::target::word
@@ -5444,27 +5464,27 @@
Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
static constexpr dart::compiler::target::word
- Thread_predefined_symbols_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1592;
+ Thread_predefined_symbols_address_offset = 680;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1608;
static constexpr dart::compiler::target::word
- Thread_saved_shadow_call_stack_offset = 1600;
+ Thread_saved_shadow_call_stack_offset = 1616;
static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
- 1616;
+ 1632;
static constexpr dart::compiler::target::word
Thread_slow_type_test_stub_offset = 472;
static constexpr dart::compiler::target::word
- Thread_slow_type_test_entry_point_offset = 640;
+ Thread_slow_type_test_entry_point_offset = 648;
static constexpr dart::compiler::target::word Thread_stack_limit_offset = 56;
static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
112;
static constexpr dart::compiler::target::word
Thread_stack_overflow_flags_offset = 120;
static constexpr dart::compiler::target::word
- Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+ Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
static constexpr dart::compiler::target::word
Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
static constexpr dart::compiler::target::word
- Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+ Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
static constexpr dart::compiler::target::word
Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
@@ -5481,18 +5501,18 @@
static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
224;
static constexpr dart::compiler::target::word
- Thread_write_barrier_entry_point_offset = 512;
+ Thread_write_barrier_entry_point_offset = 520;
static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
64;
static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
static constexpr dart::compiler::target::word Thread_callback_code_offset =
- 1624;
+ 1640;
static constexpr dart::compiler::target::word
- Thread_callback_stack_return_offset = 1632;
-static constexpr dart::compiler::target::word Thread_random_offset = 1664;
+ Thread_callback_stack_return_offset = 1648;
+static constexpr dart::compiler::target::word Thread_random_offset = 1680;
static constexpr dart::compiler::target::word
- Thread_jump_to_frame_entry_point_offset = 632;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1672;
+ Thread_jump_to_frame_entry_point_offset = 640;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1688;
static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
0;
static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -5563,9 +5583,9 @@
8, 24, 16, 32};
static constexpr dart::compiler::target::word
Thread_write_barrier_wrappers_thread_offset[] = {
- 1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496,
- 1504, 1512, 1520, 1528, -1, -1, -1, -1, 1536, 1544, -1,
- -1, 1552, 1560, 1568, -1, -1, -1, -1, -1, -1};
+ 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496, 1504, 1512,
+ 1520, 1528, 1536, 1544, -1, -1, -1, -1, 1552, 1560, -1,
+ -1, 1568, 1576, 1584, -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_header_size = 24;
@@ -5879,95 +5899,97 @@
static constexpr dart::compiler::target::word String_length_offset = 8;
static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 8;
static constexpr dart::compiler::target::word
- Thread_AllocateArray_entry_point_offset = 736;
+ Thread_AllocateArray_entry_point_offset = 744;
static constexpr dart::compiler::target::word Thread_active_exception_offset =
- 1504;
+ 1520;
static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
- 1512;
+ 1528;
static constexpr dart::compiler::target::word
Thread_array_write_barrier_code_offset = 232;
static constexpr dart::compiler::target::word
- Thread_array_write_barrier_entry_point_offset = 520;
+ Thread_array_write_barrier_entry_point_offset = 528;
static constexpr dart::compiler::target::word
- Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+ Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
static constexpr dart::compiler::target::word
Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
static constexpr dart::compiler::target::word
- Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+ Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
static constexpr dart::compiler::target::word
Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
static constexpr dart::compiler::target::word
- Thread_allocate_object_entry_point_offset = 552;
+ Thread_allocate_object_entry_point_offset = 560;
static constexpr dart::compiler::target::word
Thread_allocate_object_stub_offset = 368;
static constexpr dart::compiler::target::word
- Thread_allocate_object_parameterized_entry_point_offset = 560;
+ Thread_allocate_object_parameterized_entry_point_offset = 568;
static constexpr dart::compiler::target::word
Thread_allocate_object_parameterized_stub_offset = 376;
static constexpr dart::compiler::target::word
- Thread_allocate_object_slow_entry_point_offset = 568;
+ Thread_allocate_object_slow_entry_point_offset = 576;
static constexpr dart::compiler::target::word
Thread_allocate_object_slow_stub_offset = 384;
static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
- 1584;
+ 1600;
static constexpr dart::compiler::target::word
- Thread_auto_scope_native_wrapper_entry_point_offset = 664;
+ Thread_auto_scope_native_wrapper_entry_point_offset = 672;
static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
static constexpr dart::compiler::target::word Thread_bool_true_offset = 208;
static constexpr dart::compiler::target::word
- Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+ Thread_bootstrap_native_wrapper_entry_point_offset = 656;
static constexpr dart::compiler::target::word
- Thread_call_to_runtime_entry_point_offset = 528;
+ Thread_call_to_runtime_entry_point_offset = 536;
static constexpr dart::compiler::target::word
Thread_call_to_runtime_stub_offset = 264;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1624;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1640;
static constexpr dart::compiler::target::word
Thread_dispatch_table_array_offset = 88;
static constexpr dart::compiler::target::word
- Thread_double_truncate_round_supported_offset = 1592;
+ Thread_double_truncate_round_supported_offset = 1608;
static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
- 608;
+ 616;
static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 440;
static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
- 616;
+ 624;
static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
448;
static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
- 696;
+ 704;
static constexpr dart::compiler::target::word
- Thread_double_negate_address_offset = 688;
+ Thread_double_negate_address_offset = 696;
static constexpr dart::compiler::target::word Thread_end_offset = 104;
static constexpr dart::compiler::target::word
Thread_enter_safepoint_stub_offset = 488;
static constexpr dart::compiler::target::word Thread_execution_state_offset =
- 1544;
+ 1560;
static constexpr dart::compiler::target::word
Thread_exit_safepoint_stub_offset = 496;
static constexpr dart::compiler::target::word
- Thread_call_native_through_safepoint_stub_offset = 504;
+ Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 504;
static constexpr dart::compiler::target::word
- Thread_call_native_through_safepoint_entry_point_offset = 624;
+ Thread_call_native_through_safepoint_stub_offset = 512;
+static constexpr dart::compiler::target::word
+ Thread_call_native_through_safepoint_entry_point_offset = 632;
static constexpr dart::compiler::target::word
Thread_fix_allocation_stub_code_offset = 248;
static constexpr dart::compiler::target::word
Thread_fix_callers_target_code_offset = 240;
static constexpr dart::compiler::target::word
- Thread_float_absolute_address_offset = 720;
+ Thread_float_absolute_address_offset = 728;
static constexpr dart::compiler::target::word
- Thread_float_negate_address_offset = 712;
+ Thread_float_negate_address_offset = 720;
static constexpr dart::compiler::target::word Thread_float_not_address_offset =
- 704;
+ 712;
static constexpr dart::compiler::target::word
- Thread_float_zerow_address_offset = 728;
+ Thread_float_zerow_address_offset = 736;
static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
- 1520;
+ 1536;
static constexpr dart::compiler::target::word
Thread_invoke_dart_code_stub_offset = 256;
static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
- 1576;
+ 1592;
static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
static constexpr dart::compiler::target::word Thread_isolate_group_offset =
- 1632;
+ 1648;
static constexpr dart::compiler::target::word Thread_field_table_values_offset =
128;
static constexpr dart::compiler::target::word
@@ -5979,13 +6001,13 @@
static constexpr dart::compiler::target::word
Thread_marking_stack_block_offset = 160;
static constexpr dart::compiler::target::word
- Thread_megamorphic_call_checked_entry_offset = 592;
+ Thread_megamorphic_call_checked_entry_offset = 600;
static constexpr dart::compiler::target::word
- Thread_switchable_call_miss_entry_offset = 600;
+ Thread_switchable_call_miss_entry_offset = 608;
static constexpr dart::compiler::target::word
Thread_switchable_call_miss_stub_offset = 408;
static constexpr dart::compiler::target::word
- Thread_no_scope_native_wrapper_entry_point_offset = 656;
+ Thread_no_scope_native_wrapper_entry_point_offset = 664;
static constexpr dart::compiler::target::word
Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
static constexpr dart::compiler::target::word
@@ -6008,27 +6030,27 @@
Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
static constexpr dart::compiler::target::word
- Thread_predefined_symbols_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1528;
+ Thread_predefined_symbols_address_offset = 680;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1544;
static constexpr dart::compiler::target::word
- Thread_saved_shadow_call_stack_offset = 1536;
+ Thread_saved_shadow_call_stack_offset = 1552;
static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
- 1552;
+ 1568;
static constexpr dart::compiler::target::word
Thread_slow_type_test_stub_offset = 472;
static constexpr dart::compiler::target::word
- Thread_slow_type_test_entry_point_offset = 640;
+ Thread_slow_type_test_entry_point_offset = 648;
static constexpr dart::compiler::target::word Thread_stack_limit_offset = 56;
static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
112;
static constexpr dart::compiler::target::word
Thread_stack_overflow_flags_offset = 120;
static constexpr dart::compiler::target::word
- Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+ Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
static constexpr dart::compiler::target::word
Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
static constexpr dart::compiler::target::word
- Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+ Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
static constexpr dart::compiler::target::word
Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
@@ -6045,18 +6067,18 @@
static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
224;
static constexpr dart::compiler::target::word
- Thread_write_barrier_entry_point_offset = 512;
+ Thread_write_barrier_entry_point_offset = 520;
static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
64;
static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
static constexpr dart::compiler::target::word Thread_callback_code_offset =
- 1560;
+ 1576;
static constexpr dart::compiler::target::word
- Thread_callback_stack_return_offset = 1568;
-static constexpr dart::compiler::target::word Thread_random_offset = 1600;
+ Thread_callback_stack_return_offset = 1584;
+static constexpr dart::compiler::target::word Thread_random_offset = 1616;
static constexpr dart::compiler::target::word
- Thread_jump_to_frame_entry_point_offset = 632;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1608;
+ Thread_jump_to_frame_entry_point_offset = 640;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1624;
static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
0;
static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -6127,8 +6149,8 @@
8, 24, 16, 32};
static constexpr dart::compiler::target::word
Thread_write_barrier_wrappers_thread_offset[] = {
- 1416, 1424, 1432, 1440, -1, -1, 1448, 1456,
- 1464, 1472, 1480, -1, 1488, 1496, -1, -1};
+ 1432, 1440, 1448, 1456, -1, -1, 1464, 1472,
+ 1480, 1488, 1496, -1, 1504, 1512, -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_header_size = 16;
@@ -6442,95 +6464,97 @@
static constexpr dart::compiler::target::word String_length_offset = 8;
static constexpr dart::compiler::target::word SubtypeTestCache_cache_offset = 8;
static constexpr dart::compiler::target::word
- Thread_AllocateArray_entry_point_offset = 736;
+ Thread_AllocateArray_entry_point_offset = 744;
static constexpr dart::compiler::target::word Thread_active_exception_offset =
- 1568;
+ 1584;
static constexpr dart::compiler::target::word Thread_active_stacktrace_offset =
- 1576;
+ 1592;
static constexpr dart::compiler::target::word
Thread_array_write_barrier_code_offset = 232;
static constexpr dart::compiler::target::word
- Thread_array_write_barrier_entry_point_offset = 520;
+ Thread_array_write_barrier_entry_point_offset = 528;
static constexpr dart::compiler::target::word
- Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+ Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
static constexpr dart::compiler::target::word
Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
static constexpr dart::compiler::target::word
- Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+ Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
static constexpr dart::compiler::target::word
Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
static constexpr dart::compiler::target::word
- Thread_allocate_object_entry_point_offset = 552;
+ Thread_allocate_object_entry_point_offset = 560;
static constexpr dart::compiler::target::word
Thread_allocate_object_stub_offset = 368;
static constexpr dart::compiler::target::word
- Thread_allocate_object_parameterized_entry_point_offset = 560;
+ Thread_allocate_object_parameterized_entry_point_offset = 568;
static constexpr dart::compiler::target::word
Thread_allocate_object_parameterized_stub_offset = 376;
static constexpr dart::compiler::target::word
- Thread_allocate_object_slow_entry_point_offset = 568;
+ Thread_allocate_object_slow_entry_point_offset = 576;
static constexpr dart::compiler::target::word
Thread_allocate_object_slow_stub_offset = 384;
static constexpr dart::compiler::target::word Thread_api_top_scope_offset =
- 1648;
+ 1664;
static constexpr dart::compiler::target::word
- Thread_auto_scope_native_wrapper_entry_point_offset = 664;
+ Thread_auto_scope_native_wrapper_entry_point_offset = 672;
static constexpr dart::compiler::target::word Thread_bool_false_offset = 216;
static constexpr dart::compiler::target::word Thread_bool_true_offset = 208;
static constexpr dart::compiler::target::word
- Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+ Thread_bootstrap_native_wrapper_entry_point_offset = 656;
static constexpr dart::compiler::target::word
- Thread_call_to_runtime_entry_point_offset = 528;
+ Thread_call_to_runtime_entry_point_offset = 536;
static constexpr dart::compiler::target::word
Thread_call_to_runtime_stub_offset = 264;
-static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1688;
+static constexpr dart::compiler::target::word Thread_dart_stream_offset = 1704;
static constexpr dart::compiler::target::word
Thread_dispatch_table_array_offset = 88;
static constexpr dart::compiler::target::word
- Thread_double_truncate_round_supported_offset = 1656;
+ Thread_double_truncate_round_supported_offset = 1672;
static constexpr dart::compiler::target::word Thread_optimize_entry_offset =
- 608;
+ 616;
static constexpr dart::compiler::target::word Thread_optimize_stub_offset = 440;
static constexpr dart::compiler::target::word Thread_deoptimize_entry_offset =
- 616;
+ 624;
static constexpr dart::compiler::target::word Thread_deoptimize_stub_offset =
448;
static constexpr dart::compiler::target::word Thread_double_abs_address_offset =
- 696;
+ 704;
static constexpr dart::compiler::target::word
- Thread_double_negate_address_offset = 688;
+ Thread_double_negate_address_offset = 696;
static constexpr dart::compiler::target::word Thread_end_offset = 104;
static constexpr dart::compiler::target::word
Thread_enter_safepoint_stub_offset = 488;
static constexpr dart::compiler::target::word Thread_execution_state_offset =
- 1608;
+ 1624;
static constexpr dart::compiler::target::word
Thread_exit_safepoint_stub_offset = 496;
static constexpr dart::compiler::target::word
- Thread_call_native_through_safepoint_stub_offset = 504;
+ Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 504;
static constexpr dart::compiler::target::word
- Thread_call_native_through_safepoint_entry_point_offset = 624;
+ Thread_call_native_through_safepoint_stub_offset = 512;
+static constexpr dart::compiler::target::word
+ Thread_call_native_through_safepoint_entry_point_offset = 632;
static constexpr dart::compiler::target::word
Thread_fix_allocation_stub_code_offset = 248;
static constexpr dart::compiler::target::word
Thread_fix_callers_target_code_offset = 240;
static constexpr dart::compiler::target::word
- Thread_float_absolute_address_offset = 720;
+ Thread_float_absolute_address_offset = 728;
static constexpr dart::compiler::target::word
- Thread_float_negate_address_offset = 712;
+ Thread_float_negate_address_offset = 720;
static constexpr dart::compiler::target::word Thread_float_not_address_offset =
- 704;
+ 712;
static constexpr dart::compiler::target::word
- Thread_float_zerow_address_offset = 728;
+ Thread_float_zerow_address_offset = 736;
static constexpr dart::compiler::target::word Thread_global_object_pool_offset =
- 1584;
+ 1600;
static constexpr dart::compiler::target::word
Thread_invoke_dart_code_stub_offset = 256;
static constexpr dart::compiler::target::word Thread_exit_through_ffi_offset =
- 1640;
+ 1656;
static constexpr dart::compiler::target::word Thread_isolate_offset = 80;
static constexpr dart::compiler::target::word Thread_isolate_group_offset =
- 1696;
+ 1712;
static constexpr dart::compiler::target::word Thread_field_table_values_offset =
128;
static constexpr dart::compiler::target::word
@@ -6542,13 +6566,13 @@
static constexpr dart::compiler::target::word
Thread_marking_stack_block_offset = 160;
static constexpr dart::compiler::target::word
- Thread_megamorphic_call_checked_entry_offset = 592;
+ Thread_megamorphic_call_checked_entry_offset = 600;
static constexpr dart::compiler::target::word
- Thread_switchable_call_miss_entry_offset = 600;
+ Thread_switchable_call_miss_entry_offset = 608;
static constexpr dart::compiler::target::word
Thread_switchable_call_miss_stub_offset = 408;
static constexpr dart::compiler::target::word
- Thread_no_scope_native_wrapper_entry_point_offset = 656;
+ Thread_no_scope_native_wrapper_entry_point_offset = 664;
static constexpr dart::compiler::target::word
Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
static constexpr dart::compiler::target::word
@@ -6571,27 +6595,27 @@
Thread_range_error_shared_without_fpu_regs_stub_offset = 336;
static constexpr dart::compiler::target::word Thread_object_null_offset = 200;
static constexpr dart::compiler::target::word
- Thread_predefined_symbols_address_offset = 672;
-static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1592;
+ Thread_predefined_symbols_address_offset = 680;
+static constexpr dart::compiler::target::word Thread_resume_pc_offset = 1608;
static constexpr dart::compiler::target::word
- Thread_saved_shadow_call_stack_offset = 1600;
+ Thread_saved_shadow_call_stack_offset = 1616;
static constexpr dart::compiler::target::word Thread_safepoint_state_offset =
- 1616;
+ 1632;
static constexpr dart::compiler::target::word
Thread_slow_type_test_stub_offset = 472;
static constexpr dart::compiler::target::word
- Thread_slow_type_test_entry_point_offset = 640;
+ Thread_slow_type_test_entry_point_offset = 648;
static constexpr dart::compiler::target::word Thread_stack_limit_offset = 56;
static constexpr dart::compiler::target::word Thread_saved_stack_limit_offset =
112;
static constexpr dart::compiler::target::word
Thread_stack_overflow_flags_offset = 120;
static constexpr dart::compiler::target::word
- Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+ Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
static constexpr dart::compiler::target::word
Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
static constexpr dart::compiler::target::word
- Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+ Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
static constexpr dart::compiler::target::word
Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
static constexpr dart::compiler::target::word Thread_store_buffer_block_offset =
@@ -6608,18 +6632,18 @@
static constexpr dart::compiler::target::word Thread_write_barrier_code_offset =
224;
static constexpr dart::compiler::target::word
- Thread_write_barrier_entry_point_offset = 512;
+ Thread_write_barrier_entry_point_offset = 520;
static constexpr dart::compiler::target::word Thread_write_barrier_mask_offset =
64;
static constexpr dart::compiler::target::word Thread_heap_base_offset = 72;
static constexpr dart::compiler::target::word Thread_callback_code_offset =
- 1624;
+ 1640;
static constexpr dart::compiler::target::word
- Thread_callback_stack_return_offset = 1632;
-static constexpr dart::compiler::target::word Thread_random_offset = 1664;
+ Thread_callback_stack_return_offset = 1648;
+static constexpr dart::compiler::target::word Thread_random_offset = 1680;
static constexpr dart::compiler::target::word
- Thread_jump_to_frame_entry_point_offset = 632;
-static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1672;
+ Thread_jump_to_frame_entry_point_offset = 640;
+static constexpr dart::compiler::target::word Thread_tsan_utils_offset = 1688;
static constexpr dart::compiler::target::word TsanUtils_setjmp_function_offset =
0;
static constexpr dart::compiler::target::word TsanUtils_setjmp_buffer_offset =
@@ -6690,9 +6714,9 @@
8, 24, 16, 32};
static constexpr dart::compiler::target::word
Thread_write_barrier_wrappers_thread_offset[] = {
- 1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496,
- 1504, 1512, 1520, 1528, -1, -1, -1, -1, 1536, 1544, -1,
- -1, 1552, 1560, 1568, -1, -1, -1, -1, -1, -1};
+ 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496, 1504, 1512,
+ 1520, 1528, 1536, 1544, -1, -1, -1, -1, 1552, 1560, -1,
+ -1, 1568, 1576, 1584, -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_header_size = 16;
@@ -7043,98 +7067,100 @@
static constexpr dart::compiler::target::word
AOT_SubtypeTestCache_cache_offset = 4;
static constexpr dart::compiler::target::word
- AOT_Thread_AllocateArray_entry_point_offset = 380;
+ AOT_Thread_AllocateArray_entry_point_offset = 384;
static constexpr dart::compiler::target::word
- AOT_Thread_active_exception_offset = 752;
+ AOT_Thread_active_exception_offset = 760;
static constexpr dart::compiler::target::word
- AOT_Thread_active_stacktrace_offset = 756;
+ AOT_Thread_active_stacktrace_offset = 764;
static constexpr dart::compiler::target::word
AOT_Thread_array_write_barrier_code_offset = 128;
static constexpr dart::compiler::target::word
- AOT_Thread_array_write_barrier_entry_point_offset = 272;
+ AOT_Thread_array_write_barrier_entry_point_offset = 276;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 280;
+ AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 284;
static constexpr dart::compiler::target::word
AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 188;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 284;
+ AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 288;
static constexpr dart::compiler::target::word
AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 192;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_object_entry_point_offset = 288;
+ AOT_Thread_allocate_object_entry_point_offset = 292;
static constexpr dart::compiler::target::word
AOT_Thread_allocate_object_stub_offset = 196;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_object_parameterized_entry_point_offset = 292;
+ AOT_Thread_allocate_object_parameterized_entry_point_offset = 296;
static constexpr dart::compiler::target::word
AOT_Thread_allocate_object_parameterized_stub_offset = 200;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_object_slow_entry_point_offset = 296;
+ AOT_Thread_allocate_object_slow_entry_point_offset = 300;
static constexpr dart::compiler::target::word
AOT_Thread_allocate_object_slow_stub_offset = 204;
static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
- 792;
+ 800;
static constexpr dart::compiler::target::word
- AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 344;
+ AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 348;
static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
120;
static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 116;
static constexpr dart::compiler::target::word
- AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 336;
+ AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 340;
static constexpr dart::compiler::target::word
- AOT_Thread_call_to_runtime_entry_point_offset = 276;
+ AOT_Thread_call_to_runtime_entry_point_offset = 280;
static constexpr dart::compiler::target::word
AOT_Thread_call_to_runtime_stub_offset = 144;
static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
- 816;
+ 824;
static constexpr dart::compiler::target::word
AOT_Thread_dispatch_table_array_offset = 44;
static constexpr dart::compiler::target::word
- AOT_Thread_double_truncate_round_supported_offset = 796;
+ AOT_Thread_double_truncate_round_supported_offset = 804;
static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
- 316;
+ 320;
static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
232;
static constexpr dart::compiler::target::word
- AOT_Thread_deoptimize_entry_offset = 320;
+ AOT_Thread_deoptimize_entry_offset = 324;
static constexpr dart::compiler::target::word
AOT_Thread_deoptimize_stub_offset = 236;
static constexpr dart::compiler::target::word
- AOT_Thread_double_abs_address_offset = 360;
+ AOT_Thread_double_abs_address_offset = 364;
static constexpr dart::compiler::target::word
- AOT_Thread_double_negate_address_offset = 356;
+ AOT_Thread_double_negate_address_offset = 360;
static constexpr dart::compiler::target::word AOT_Thread_end_offset = 52;
static constexpr dart::compiler::target::word
AOT_Thread_enter_safepoint_stub_offset = 256;
static constexpr dart::compiler::target::word
- AOT_Thread_execution_state_offset = 772;
+ AOT_Thread_execution_state_offset = 780;
static constexpr dart::compiler::target::word
AOT_Thread_exit_safepoint_stub_offset = 260;
static constexpr dart::compiler::target::word
- AOT_Thread_call_native_through_safepoint_stub_offset = 264;
+ AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 264;
static constexpr dart::compiler::target::word
- AOT_Thread_call_native_through_safepoint_entry_point_offset = 324;
+ AOT_Thread_call_native_through_safepoint_stub_offset = 268;
+static constexpr dart::compiler::target::word
+ AOT_Thread_call_native_through_safepoint_entry_point_offset = 328;
static constexpr dart::compiler::target::word
AOT_Thread_fix_allocation_stub_code_offset = 136;
static constexpr dart::compiler::target::word
AOT_Thread_fix_callers_target_code_offset = 132;
static constexpr dart::compiler::target::word
- AOT_Thread_float_absolute_address_offset = 372;
+ AOT_Thread_float_absolute_address_offset = 376;
static constexpr dart::compiler::target::word
- AOT_Thread_float_negate_address_offset = 368;
+ AOT_Thread_float_negate_address_offset = 372;
static constexpr dart::compiler::target::word
- AOT_Thread_float_not_address_offset = 364;
+ AOT_Thread_float_not_address_offset = 368;
static constexpr dart::compiler::target::word
- AOT_Thread_float_zerow_address_offset = 376;
+ AOT_Thread_float_zerow_address_offset = 380;
static constexpr dart::compiler::target::word
- AOT_Thread_global_object_pool_offset = 760;
+ AOT_Thread_global_object_pool_offset = 768;
static constexpr dart::compiler::target::word
AOT_Thread_invoke_dart_code_stub_offset = 140;
static constexpr dart::compiler::target::word
- AOT_Thread_exit_through_ffi_offset = 788;
+ AOT_Thread_exit_through_ffi_offset = 796;
static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 40;
static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
- 820;
+ 828;
static constexpr dart::compiler::target::word
AOT_Thread_field_table_values_offset = 64;
static constexpr dart::compiler::target::word
@@ -7146,13 +7172,13 @@
static constexpr dart::compiler::target::word
AOT_Thread_marking_stack_block_offset = 80;
static constexpr dart::compiler::target::word
- AOT_Thread_megamorphic_call_checked_entry_offset = 308;
+ AOT_Thread_megamorphic_call_checked_entry_offset = 312;
static constexpr dart::compiler::target::word
- AOT_Thread_switchable_call_miss_entry_offset = 312;
+ AOT_Thread_switchable_call_miss_entry_offset = 316;
static constexpr dart::compiler::target::word
AOT_Thread_switchable_call_miss_stub_offset = 216;
static constexpr dart::compiler::target::word
- AOT_Thread_no_scope_native_wrapper_entry_point_offset = 340;
+ AOT_Thread_no_scope_native_wrapper_entry_point_offset = 344;
static constexpr dart::compiler::target::word
AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 152;
static constexpr dart::compiler::target::word
@@ -7177,16 +7203,16 @@
static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
112;
static constexpr dart::compiler::target::word
- AOT_Thread_predefined_symbols_address_offset = 348;
-static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 764;
+ AOT_Thread_predefined_symbols_address_offset = 352;
+static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 772;
static constexpr dart::compiler::target::word
- AOT_Thread_saved_shadow_call_stack_offset = 768;
+ AOT_Thread_saved_shadow_call_stack_offset = 776;
static constexpr dart::compiler::target::word
- AOT_Thread_safepoint_state_offset = 776;
+ AOT_Thread_safepoint_state_offset = 784;
static constexpr dart::compiler::target::word
AOT_Thread_slow_type_test_stub_offset = 248;
static constexpr dart::compiler::target::word
- AOT_Thread_slow_type_test_entry_point_offset = 332;
+ AOT_Thread_slow_type_test_entry_point_offset = 336;
static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
28;
static constexpr dart::compiler::target::word
@@ -7194,11 +7220,11 @@
static constexpr dart::compiler::target::word
AOT_Thread_stack_overflow_flags_offset = 60;
static constexpr dart::compiler::target::word
- AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 304;
+ AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 308;
static constexpr dart::compiler::target::word
AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 212;
static constexpr dart::compiler::target::word
- AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 300;
+ AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 304;
static constexpr dart::compiler::target::word
AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 208;
static constexpr dart::compiler::target::word
@@ -7216,19 +7242,19 @@
static constexpr dart::compiler::target::word
AOT_Thread_write_barrier_code_offset = 124;
static constexpr dart::compiler::target::word
- AOT_Thread_write_barrier_entry_point_offset = 268;
+ AOT_Thread_write_barrier_entry_point_offset = 272;
static constexpr dart::compiler::target::word
AOT_Thread_write_barrier_mask_offset = 32;
static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 36;
static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
- 780;
+ 788;
static constexpr dart::compiler::target::word
- AOT_Thread_callback_stack_return_offset = 784;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 800;
+ AOT_Thread_callback_stack_return_offset = 792;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 808;
static constexpr dart::compiler::target::word
- AOT_Thread_jump_to_frame_entry_point_offset = 328;
+ AOT_Thread_jump_to_frame_entry_point_offset = 332;
static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
- 808;
+ 816;
static constexpr dart::compiler::target::word
AOT_TsanUtils_setjmp_function_offset = 0;
static constexpr dart::compiler::target::word
@@ -7311,7 +7337,7 @@
4, 12, 8, 16};
static constexpr dart::compiler::target::word
AOT_Thread_write_barrier_wrappers_thread_offset[] = {
- 720, 724, 728, 732, 736, -1, 740, -1, 744, 748, -1, -1, -1, -1, -1, -1};
+ 728, 732, 736, 740, 744, -1, 748, -1, 752, 756, -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;
@@ -7673,98 +7699,100 @@
static constexpr dart::compiler::target::word
AOT_SubtypeTestCache_cache_offset = 8;
static constexpr dart::compiler::target::word
- AOT_Thread_AllocateArray_entry_point_offset = 736;
+ AOT_Thread_AllocateArray_entry_point_offset = 744;
static constexpr dart::compiler::target::word
- AOT_Thread_active_exception_offset = 1504;
+ AOT_Thread_active_exception_offset = 1520;
static constexpr dart::compiler::target::word
- AOT_Thread_active_stacktrace_offset = 1512;
+ AOT_Thread_active_stacktrace_offset = 1528;
static constexpr dart::compiler::target::word
AOT_Thread_array_write_barrier_code_offset = 232;
static constexpr dart::compiler::target::word
- AOT_Thread_array_write_barrier_entry_point_offset = 520;
+ AOT_Thread_array_write_barrier_entry_point_offset = 528;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+ AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
static constexpr dart::compiler::target::word
AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+ AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
static constexpr dart::compiler::target::word
AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_object_entry_point_offset = 552;
+ AOT_Thread_allocate_object_entry_point_offset = 560;
static constexpr dart::compiler::target::word
AOT_Thread_allocate_object_stub_offset = 368;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_object_parameterized_entry_point_offset = 560;
+ AOT_Thread_allocate_object_parameterized_entry_point_offset = 568;
static constexpr dart::compiler::target::word
AOT_Thread_allocate_object_parameterized_stub_offset = 376;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_object_slow_entry_point_offset = 568;
+ AOT_Thread_allocate_object_slow_entry_point_offset = 576;
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 =
- 1584;
+ 1600;
static constexpr dart::compiler::target::word
- AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
+ AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 672;
static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
216;
static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
static constexpr dart::compiler::target::word
- AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+ AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 656;
static constexpr dart::compiler::target::word
- AOT_Thread_call_to_runtime_entry_point_offset = 528;
+ AOT_Thread_call_to_runtime_entry_point_offset = 536;
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 =
- 1624;
+ 1640;
static constexpr dart::compiler::target::word
AOT_Thread_dispatch_table_array_offset = 88;
static constexpr dart::compiler::target::word
- AOT_Thread_double_truncate_round_supported_offset = 1592;
+ AOT_Thread_double_truncate_round_supported_offset = 1608;
static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
- 608;
+ 616;
static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
440;
static constexpr dart::compiler::target::word
- AOT_Thread_deoptimize_entry_offset = 616;
+ AOT_Thread_deoptimize_entry_offset = 624;
static constexpr dart::compiler::target::word
AOT_Thread_deoptimize_stub_offset = 448;
static constexpr dart::compiler::target::word
- AOT_Thread_double_abs_address_offset = 696;
+ AOT_Thread_double_abs_address_offset = 704;
static constexpr dart::compiler::target::word
- AOT_Thread_double_negate_address_offset = 688;
+ AOT_Thread_double_negate_address_offset = 696;
static constexpr dart::compiler::target::word AOT_Thread_end_offset = 104;
static constexpr dart::compiler::target::word
AOT_Thread_enter_safepoint_stub_offset = 488;
static constexpr dart::compiler::target::word
- AOT_Thread_execution_state_offset = 1544;
+ AOT_Thread_execution_state_offset = 1560;
static constexpr dart::compiler::target::word
AOT_Thread_exit_safepoint_stub_offset = 496;
static constexpr dart::compiler::target::word
- AOT_Thread_call_native_through_safepoint_stub_offset = 504;
+ AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 504;
static constexpr dart::compiler::target::word
- AOT_Thread_call_native_through_safepoint_entry_point_offset = 624;
+ AOT_Thread_call_native_through_safepoint_stub_offset = 512;
+static constexpr dart::compiler::target::word
+ AOT_Thread_call_native_through_safepoint_entry_point_offset = 632;
static constexpr dart::compiler::target::word
AOT_Thread_fix_allocation_stub_code_offset = 248;
static constexpr dart::compiler::target::word
AOT_Thread_fix_callers_target_code_offset = 240;
static constexpr dart::compiler::target::word
- AOT_Thread_float_absolute_address_offset = 720;
+ AOT_Thread_float_absolute_address_offset = 728;
static constexpr dart::compiler::target::word
- AOT_Thread_float_negate_address_offset = 712;
+ AOT_Thread_float_negate_address_offset = 720;
static constexpr dart::compiler::target::word
- AOT_Thread_float_not_address_offset = 704;
+ AOT_Thread_float_not_address_offset = 712;
static constexpr dart::compiler::target::word
- AOT_Thread_float_zerow_address_offset = 728;
+ AOT_Thread_float_zerow_address_offset = 736;
static constexpr dart::compiler::target::word
- AOT_Thread_global_object_pool_offset = 1520;
+ AOT_Thread_global_object_pool_offset = 1536;
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 = 1576;
+ AOT_Thread_exit_through_ffi_offset = 1592;
static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
- 1632;
+ 1648;
static constexpr dart::compiler::target::word
AOT_Thread_field_table_values_offset = 128;
static constexpr dart::compiler::target::word
@@ -7776,13 +7804,13 @@
static constexpr dart::compiler::target::word
AOT_Thread_marking_stack_block_offset = 160;
static constexpr dart::compiler::target::word
- AOT_Thread_megamorphic_call_checked_entry_offset = 592;
+ AOT_Thread_megamorphic_call_checked_entry_offset = 600;
static constexpr dart::compiler::target::word
- AOT_Thread_switchable_call_miss_entry_offset = 600;
+ AOT_Thread_switchable_call_miss_entry_offset = 608;
static constexpr dart::compiler::target::word
AOT_Thread_switchable_call_miss_stub_offset = 408;
static constexpr dart::compiler::target::word
- AOT_Thread_no_scope_native_wrapper_entry_point_offset = 656;
+ AOT_Thread_no_scope_native_wrapper_entry_point_offset = 664;
static constexpr dart::compiler::target::word
AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
static constexpr dart::compiler::target::word
@@ -7807,17 +7835,17 @@
static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
200;
static constexpr dart::compiler::target::word
- AOT_Thread_predefined_symbols_address_offset = 672;
+ AOT_Thread_predefined_symbols_address_offset = 680;
static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
- 1528;
+ 1544;
static constexpr dart::compiler::target::word
- AOT_Thread_saved_shadow_call_stack_offset = 1536;
+ AOT_Thread_saved_shadow_call_stack_offset = 1552;
static constexpr dart::compiler::target::word
- AOT_Thread_safepoint_state_offset = 1552;
+ AOT_Thread_safepoint_state_offset = 1568;
static constexpr dart::compiler::target::word
AOT_Thread_slow_type_test_stub_offset = 472;
static constexpr dart::compiler::target::word
- AOT_Thread_slow_type_test_entry_point_offset = 640;
+ AOT_Thread_slow_type_test_entry_point_offset = 648;
static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
56;
static constexpr dart::compiler::target::word
@@ -7825,11 +7853,11 @@
static constexpr dart::compiler::target::word
AOT_Thread_stack_overflow_flags_offset = 120;
static constexpr dart::compiler::target::word
- AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+ AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
static constexpr dart::compiler::target::word
AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
static constexpr dart::compiler::target::word
- AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+ AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
static constexpr dart::compiler::target::word
AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
static constexpr dart::compiler::target::word
@@ -7847,19 +7875,19 @@
static constexpr dart::compiler::target::word
AOT_Thread_write_barrier_code_offset = 224;
static constexpr dart::compiler::target::word
- AOT_Thread_write_barrier_entry_point_offset = 512;
+ AOT_Thread_write_barrier_entry_point_offset = 520;
static constexpr dart::compiler::target::word
AOT_Thread_write_barrier_mask_offset = 64;
static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
- 1560;
+ 1576;
static constexpr dart::compiler::target::word
- AOT_Thread_callback_stack_return_offset = 1568;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1600;
+ AOT_Thread_callback_stack_return_offset = 1584;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1616;
static constexpr dart::compiler::target::word
- AOT_Thread_jump_to_frame_entry_point_offset = 632;
+ AOT_Thread_jump_to_frame_entry_point_offset = 640;
static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
- 1608;
+ 1624;
static constexpr dart::compiler::target::word
AOT_TsanUtils_setjmp_function_offset = 0;
static constexpr dart::compiler::target::word
@@ -7943,8 +7971,8 @@
8, 24, 16, 32};
static constexpr dart::compiler::target::word
AOT_Thread_write_barrier_wrappers_thread_offset[] = {
- 1416, 1424, 1432, 1440, -1, -1, 1448, 1456,
- 1464, 1472, 1480, -1, 1488, 1496, -1, -1};
+ 1432, 1440, 1448, 1456, -1, -1, 1464, 1472,
+ 1480, 1488, 1496, -1, 1504, 1512, -1, -1};
static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
24;
static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -8309,98 +8337,100 @@
static constexpr dart::compiler::target::word
AOT_SubtypeTestCache_cache_offset = 8;
static constexpr dart::compiler::target::word
- AOT_Thread_AllocateArray_entry_point_offset = 736;
+ AOT_Thread_AllocateArray_entry_point_offset = 744;
static constexpr dart::compiler::target::word
- AOT_Thread_active_exception_offset = 1568;
+ AOT_Thread_active_exception_offset = 1584;
static constexpr dart::compiler::target::word
- AOT_Thread_active_stacktrace_offset = 1576;
+ AOT_Thread_active_stacktrace_offset = 1592;
static constexpr dart::compiler::target::word
AOT_Thread_array_write_barrier_code_offset = 232;
static constexpr dart::compiler::target::word
- AOT_Thread_array_write_barrier_entry_point_offset = 520;
+ AOT_Thread_array_write_barrier_entry_point_offset = 528;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+ AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
static constexpr dart::compiler::target::word
AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+ AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
static constexpr dart::compiler::target::word
AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_object_entry_point_offset = 552;
+ AOT_Thread_allocate_object_entry_point_offset = 560;
static constexpr dart::compiler::target::word
AOT_Thread_allocate_object_stub_offset = 368;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_object_parameterized_entry_point_offset = 560;
+ AOT_Thread_allocate_object_parameterized_entry_point_offset = 568;
static constexpr dart::compiler::target::word
AOT_Thread_allocate_object_parameterized_stub_offset = 376;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_object_slow_entry_point_offset = 568;
+ AOT_Thread_allocate_object_slow_entry_point_offset = 576;
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 =
- 1648;
+ 1664;
static constexpr dart::compiler::target::word
- AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
+ AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 672;
static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
216;
static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
static constexpr dart::compiler::target::word
- AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+ AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 656;
static constexpr dart::compiler::target::word
- AOT_Thread_call_to_runtime_entry_point_offset = 528;
+ AOT_Thread_call_to_runtime_entry_point_offset = 536;
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 =
- 1688;
+ 1704;
static constexpr dart::compiler::target::word
AOT_Thread_dispatch_table_array_offset = 88;
static constexpr dart::compiler::target::word
- AOT_Thread_double_truncate_round_supported_offset = 1656;
+ AOT_Thread_double_truncate_round_supported_offset = 1672;
static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
- 608;
+ 616;
static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
440;
static constexpr dart::compiler::target::word
- AOT_Thread_deoptimize_entry_offset = 616;
+ AOT_Thread_deoptimize_entry_offset = 624;
static constexpr dart::compiler::target::word
AOT_Thread_deoptimize_stub_offset = 448;
static constexpr dart::compiler::target::word
- AOT_Thread_double_abs_address_offset = 696;
+ AOT_Thread_double_abs_address_offset = 704;
static constexpr dart::compiler::target::word
- AOT_Thread_double_negate_address_offset = 688;
+ AOT_Thread_double_negate_address_offset = 696;
static constexpr dart::compiler::target::word AOT_Thread_end_offset = 104;
static constexpr dart::compiler::target::word
AOT_Thread_enter_safepoint_stub_offset = 488;
static constexpr dart::compiler::target::word
- AOT_Thread_execution_state_offset = 1608;
+ AOT_Thread_execution_state_offset = 1624;
static constexpr dart::compiler::target::word
AOT_Thread_exit_safepoint_stub_offset = 496;
static constexpr dart::compiler::target::word
- AOT_Thread_call_native_through_safepoint_stub_offset = 504;
+ AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 504;
static constexpr dart::compiler::target::word
- AOT_Thread_call_native_through_safepoint_entry_point_offset = 624;
+ AOT_Thread_call_native_through_safepoint_stub_offset = 512;
+static constexpr dart::compiler::target::word
+ AOT_Thread_call_native_through_safepoint_entry_point_offset = 632;
static constexpr dart::compiler::target::word
AOT_Thread_fix_allocation_stub_code_offset = 248;
static constexpr dart::compiler::target::word
AOT_Thread_fix_callers_target_code_offset = 240;
static constexpr dart::compiler::target::word
- AOT_Thread_float_absolute_address_offset = 720;
+ AOT_Thread_float_absolute_address_offset = 728;
static constexpr dart::compiler::target::word
- AOT_Thread_float_negate_address_offset = 712;
+ AOT_Thread_float_negate_address_offset = 720;
static constexpr dart::compiler::target::word
- AOT_Thread_float_not_address_offset = 704;
+ AOT_Thread_float_not_address_offset = 712;
static constexpr dart::compiler::target::word
- AOT_Thread_float_zerow_address_offset = 728;
+ AOT_Thread_float_zerow_address_offset = 736;
static constexpr dart::compiler::target::word
- AOT_Thread_global_object_pool_offset = 1584;
+ AOT_Thread_global_object_pool_offset = 1600;
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 = 1640;
+ AOT_Thread_exit_through_ffi_offset = 1656;
static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
- 1696;
+ 1712;
static constexpr dart::compiler::target::word
AOT_Thread_field_table_values_offset = 128;
static constexpr dart::compiler::target::word
@@ -8412,13 +8442,13 @@
static constexpr dart::compiler::target::word
AOT_Thread_marking_stack_block_offset = 160;
static constexpr dart::compiler::target::word
- AOT_Thread_megamorphic_call_checked_entry_offset = 592;
+ AOT_Thread_megamorphic_call_checked_entry_offset = 600;
static constexpr dart::compiler::target::word
- AOT_Thread_switchable_call_miss_entry_offset = 600;
+ AOT_Thread_switchable_call_miss_entry_offset = 608;
static constexpr dart::compiler::target::word
AOT_Thread_switchable_call_miss_stub_offset = 408;
static constexpr dart::compiler::target::word
- AOT_Thread_no_scope_native_wrapper_entry_point_offset = 656;
+ AOT_Thread_no_scope_native_wrapper_entry_point_offset = 664;
static constexpr dart::compiler::target::word
AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
static constexpr dart::compiler::target::word
@@ -8443,17 +8473,17 @@
static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
200;
static constexpr dart::compiler::target::word
- AOT_Thread_predefined_symbols_address_offset = 672;
+ AOT_Thread_predefined_symbols_address_offset = 680;
static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
- 1592;
+ 1608;
static constexpr dart::compiler::target::word
- AOT_Thread_saved_shadow_call_stack_offset = 1600;
+ AOT_Thread_saved_shadow_call_stack_offset = 1616;
static constexpr dart::compiler::target::word
- AOT_Thread_safepoint_state_offset = 1616;
+ AOT_Thread_safepoint_state_offset = 1632;
static constexpr dart::compiler::target::word
AOT_Thread_slow_type_test_stub_offset = 472;
static constexpr dart::compiler::target::word
- AOT_Thread_slow_type_test_entry_point_offset = 640;
+ AOT_Thread_slow_type_test_entry_point_offset = 648;
static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
56;
static constexpr dart::compiler::target::word
@@ -8461,11 +8491,11 @@
static constexpr dart::compiler::target::word
AOT_Thread_stack_overflow_flags_offset = 120;
static constexpr dart::compiler::target::word
- AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+ AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
static constexpr dart::compiler::target::word
AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
static constexpr dart::compiler::target::word
- AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+ AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
static constexpr dart::compiler::target::word
AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
static constexpr dart::compiler::target::word
@@ -8483,19 +8513,19 @@
static constexpr dart::compiler::target::word
AOT_Thread_write_barrier_code_offset = 224;
static constexpr dart::compiler::target::word
- AOT_Thread_write_barrier_entry_point_offset = 512;
+ AOT_Thread_write_barrier_entry_point_offset = 520;
static constexpr dart::compiler::target::word
AOT_Thread_write_barrier_mask_offset = 64;
static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
- 1624;
+ 1640;
static constexpr dart::compiler::target::word
- AOT_Thread_callback_stack_return_offset = 1632;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1664;
+ AOT_Thread_callback_stack_return_offset = 1648;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1680;
static constexpr dart::compiler::target::word
- AOT_Thread_jump_to_frame_entry_point_offset = 632;
+ AOT_Thread_jump_to_frame_entry_point_offset = 640;
static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
- 1672;
+ 1688;
static constexpr dart::compiler::target::word
AOT_TsanUtils_setjmp_function_offset = 0;
static constexpr dart::compiler::target::word
@@ -8579,9 +8609,9 @@
8, 24, 16, 32};
static constexpr dart::compiler::target::word
AOT_Thread_write_barrier_wrappers_thread_offset[] = {
- 1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496,
- 1504, 1512, 1520, 1528, -1, -1, -1, -1, 1536, 1544, -1,
- -1, 1552, 1560, 1568, -1, -1, -1, -1, -1, -1};
+ 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496, 1504, 1512,
+ 1520, 1528, 1536, 1544, -1, -1, -1, -1, 1552, 1560, -1,
+ -1, 1568, 1576, 1584, -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;
@@ -8942,98 +8972,100 @@
static constexpr dart::compiler::target::word
AOT_SubtypeTestCache_cache_offset = 8;
static constexpr dart::compiler::target::word
- AOT_Thread_AllocateArray_entry_point_offset = 736;
+ AOT_Thread_AllocateArray_entry_point_offset = 744;
static constexpr dart::compiler::target::word
- AOT_Thread_active_exception_offset = 1504;
+ AOT_Thread_active_exception_offset = 1520;
static constexpr dart::compiler::target::word
- AOT_Thread_active_stacktrace_offset = 1512;
+ AOT_Thread_active_stacktrace_offset = 1528;
static constexpr dart::compiler::target::word
AOT_Thread_array_write_barrier_code_offset = 232;
static constexpr dart::compiler::target::word
- AOT_Thread_array_write_barrier_entry_point_offset = 520;
+ AOT_Thread_array_write_barrier_entry_point_offset = 528;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+ AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
static constexpr dart::compiler::target::word
AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+ AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
static constexpr dart::compiler::target::word
AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_object_entry_point_offset = 552;
+ AOT_Thread_allocate_object_entry_point_offset = 560;
static constexpr dart::compiler::target::word
AOT_Thread_allocate_object_stub_offset = 368;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_object_parameterized_entry_point_offset = 560;
+ AOT_Thread_allocate_object_parameterized_entry_point_offset = 568;
static constexpr dart::compiler::target::word
AOT_Thread_allocate_object_parameterized_stub_offset = 376;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_object_slow_entry_point_offset = 568;
+ AOT_Thread_allocate_object_slow_entry_point_offset = 576;
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 =
- 1584;
+ 1600;
static constexpr dart::compiler::target::word
- AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
+ AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 672;
static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
216;
static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
static constexpr dart::compiler::target::word
- AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+ AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 656;
static constexpr dart::compiler::target::word
- AOT_Thread_call_to_runtime_entry_point_offset = 528;
+ AOT_Thread_call_to_runtime_entry_point_offset = 536;
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 =
- 1624;
+ 1640;
static constexpr dart::compiler::target::word
AOT_Thread_dispatch_table_array_offset = 88;
static constexpr dart::compiler::target::word
- AOT_Thread_double_truncate_round_supported_offset = 1592;
+ AOT_Thread_double_truncate_round_supported_offset = 1608;
static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
- 608;
+ 616;
static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
440;
static constexpr dart::compiler::target::word
- AOT_Thread_deoptimize_entry_offset = 616;
+ AOT_Thread_deoptimize_entry_offset = 624;
static constexpr dart::compiler::target::word
AOT_Thread_deoptimize_stub_offset = 448;
static constexpr dart::compiler::target::word
- AOT_Thread_double_abs_address_offset = 696;
+ AOT_Thread_double_abs_address_offset = 704;
static constexpr dart::compiler::target::word
- AOT_Thread_double_negate_address_offset = 688;
+ AOT_Thread_double_negate_address_offset = 696;
static constexpr dart::compiler::target::word AOT_Thread_end_offset = 104;
static constexpr dart::compiler::target::word
AOT_Thread_enter_safepoint_stub_offset = 488;
static constexpr dart::compiler::target::word
- AOT_Thread_execution_state_offset = 1544;
+ AOT_Thread_execution_state_offset = 1560;
static constexpr dart::compiler::target::word
AOT_Thread_exit_safepoint_stub_offset = 496;
static constexpr dart::compiler::target::word
- AOT_Thread_call_native_through_safepoint_stub_offset = 504;
+ AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 504;
static constexpr dart::compiler::target::word
- AOT_Thread_call_native_through_safepoint_entry_point_offset = 624;
+ AOT_Thread_call_native_through_safepoint_stub_offset = 512;
+static constexpr dart::compiler::target::word
+ AOT_Thread_call_native_through_safepoint_entry_point_offset = 632;
static constexpr dart::compiler::target::word
AOT_Thread_fix_allocation_stub_code_offset = 248;
static constexpr dart::compiler::target::word
AOT_Thread_fix_callers_target_code_offset = 240;
static constexpr dart::compiler::target::word
- AOT_Thread_float_absolute_address_offset = 720;
+ AOT_Thread_float_absolute_address_offset = 728;
static constexpr dart::compiler::target::word
- AOT_Thread_float_negate_address_offset = 712;
+ AOT_Thread_float_negate_address_offset = 720;
static constexpr dart::compiler::target::word
- AOT_Thread_float_not_address_offset = 704;
+ AOT_Thread_float_not_address_offset = 712;
static constexpr dart::compiler::target::word
- AOT_Thread_float_zerow_address_offset = 728;
+ AOT_Thread_float_zerow_address_offset = 736;
static constexpr dart::compiler::target::word
- AOT_Thread_global_object_pool_offset = 1520;
+ AOT_Thread_global_object_pool_offset = 1536;
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 = 1576;
+ AOT_Thread_exit_through_ffi_offset = 1592;
static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
- 1632;
+ 1648;
static constexpr dart::compiler::target::word
AOT_Thread_field_table_values_offset = 128;
static constexpr dart::compiler::target::word
@@ -9045,13 +9077,13 @@
static constexpr dart::compiler::target::word
AOT_Thread_marking_stack_block_offset = 160;
static constexpr dart::compiler::target::word
- AOT_Thread_megamorphic_call_checked_entry_offset = 592;
+ AOT_Thread_megamorphic_call_checked_entry_offset = 600;
static constexpr dart::compiler::target::word
- AOT_Thread_switchable_call_miss_entry_offset = 600;
+ AOT_Thread_switchable_call_miss_entry_offset = 608;
static constexpr dart::compiler::target::word
AOT_Thread_switchable_call_miss_stub_offset = 408;
static constexpr dart::compiler::target::word
- AOT_Thread_no_scope_native_wrapper_entry_point_offset = 656;
+ AOT_Thread_no_scope_native_wrapper_entry_point_offset = 664;
static constexpr dart::compiler::target::word
AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
static constexpr dart::compiler::target::word
@@ -9076,17 +9108,17 @@
static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
200;
static constexpr dart::compiler::target::word
- AOT_Thread_predefined_symbols_address_offset = 672;
+ AOT_Thread_predefined_symbols_address_offset = 680;
static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
- 1528;
+ 1544;
static constexpr dart::compiler::target::word
- AOT_Thread_saved_shadow_call_stack_offset = 1536;
+ AOT_Thread_saved_shadow_call_stack_offset = 1552;
static constexpr dart::compiler::target::word
- AOT_Thread_safepoint_state_offset = 1552;
+ AOT_Thread_safepoint_state_offset = 1568;
static constexpr dart::compiler::target::word
AOT_Thread_slow_type_test_stub_offset = 472;
static constexpr dart::compiler::target::word
- AOT_Thread_slow_type_test_entry_point_offset = 640;
+ AOT_Thread_slow_type_test_entry_point_offset = 648;
static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
56;
static constexpr dart::compiler::target::word
@@ -9094,11 +9126,11 @@
static constexpr dart::compiler::target::word
AOT_Thread_stack_overflow_flags_offset = 120;
static constexpr dart::compiler::target::word
- AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+ AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
static constexpr dart::compiler::target::word
AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
static constexpr dart::compiler::target::word
- AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+ AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
static constexpr dart::compiler::target::word
AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
static constexpr dart::compiler::target::word
@@ -9116,19 +9148,19 @@
static constexpr dart::compiler::target::word
AOT_Thread_write_barrier_code_offset = 224;
static constexpr dart::compiler::target::word
- AOT_Thread_write_barrier_entry_point_offset = 512;
+ AOT_Thread_write_barrier_entry_point_offset = 520;
static constexpr dart::compiler::target::word
AOT_Thread_write_barrier_mask_offset = 64;
static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
- 1560;
+ 1576;
static constexpr dart::compiler::target::word
- AOT_Thread_callback_stack_return_offset = 1568;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1600;
+ AOT_Thread_callback_stack_return_offset = 1584;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1616;
static constexpr dart::compiler::target::word
- AOT_Thread_jump_to_frame_entry_point_offset = 632;
+ AOT_Thread_jump_to_frame_entry_point_offset = 640;
static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
- 1608;
+ 1624;
static constexpr dart::compiler::target::word
AOT_TsanUtils_setjmp_function_offset = 0;
static constexpr dart::compiler::target::word
@@ -9212,8 +9244,8 @@
8, 24, 16, 32};
static constexpr dart::compiler::target::word
AOT_Thread_write_barrier_wrappers_thread_offset[] = {
- 1416, 1424, 1432, 1440, -1, -1, 1448, 1456,
- 1464, 1472, 1480, -1, 1488, 1496, -1, -1};
+ 1432, 1440, 1448, 1456, -1, -1, 1464, 1472,
+ 1480, 1488, 1496, -1, 1504, 1512, -1, -1};
static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
24;
static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -9574,98 +9606,100 @@
static constexpr dart::compiler::target::word
AOT_SubtypeTestCache_cache_offset = 8;
static constexpr dart::compiler::target::word
- AOT_Thread_AllocateArray_entry_point_offset = 736;
+ AOT_Thread_AllocateArray_entry_point_offset = 744;
static constexpr dart::compiler::target::word
- AOT_Thread_active_exception_offset = 1568;
+ AOT_Thread_active_exception_offset = 1584;
static constexpr dart::compiler::target::word
- AOT_Thread_active_stacktrace_offset = 1576;
+ AOT_Thread_active_stacktrace_offset = 1592;
static constexpr dart::compiler::target::word
AOT_Thread_array_write_barrier_code_offset = 232;
static constexpr dart::compiler::target::word
- AOT_Thread_array_write_barrier_entry_point_offset = 520;
+ AOT_Thread_array_write_barrier_entry_point_offset = 528;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+ AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
static constexpr dart::compiler::target::word
AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+ AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
static constexpr dart::compiler::target::word
AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_object_entry_point_offset = 552;
+ AOT_Thread_allocate_object_entry_point_offset = 560;
static constexpr dart::compiler::target::word
AOT_Thread_allocate_object_stub_offset = 368;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_object_parameterized_entry_point_offset = 560;
+ AOT_Thread_allocate_object_parameterized_entry_point_offset = 568;
static constexpr dart::compiler::target::word
AOT_Thread_allocate_object_parameterized_stub_offset = 376;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_object_slow_entry_point_offset = 568;
+ AOT_Thread_allocate_object_slow_entry_point_offset = 576;
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 =
- 1648;
+ 1664;
static constexpr dart::compiler::target::word
- AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
+ AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 672;
static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
216;
static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
static constexpr dart::compiler::target::word
- AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+ AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 656;
static constexpr dart::compiler::target::word
- AOT_Thread_call_to_runtime_entry_point_offset = 528;
+ AOT_Thread_call_to_runtime_entry_point_offset = 536;
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 =
- 1688;
+ 1704;
static constexpr dart::compiler::target::word
AOT_Thread_dispatch_table_array_offset = 88;
static constexpr dart::compiler::target::word
- AOT_Thread_double_truncate_round_supported_offset = 1656;
+ AOT_Thread_double_truncate_round_supported_offset = 1672;
static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
- 608;
+ 616;
static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
440;
static constexpr dart::compiler::target::word
- AOT_Thread_deoptimize_entry_offset = 616;
+ AOT_Thread_deoptimize_entry_offset = 624;
static constexpr dart::compiler::target::word
AOT_Thread_deoptimize_stub_offset = 448;
static constexpr dart::compiler::target::word
- AOT_Thread_double_abs_address_offset = 696;
+ AOT_Thread_double_abs_address_offset = 704;
static constexpr dart::compiler::target::word
- AOT_Thread_double_negate_address_offset = 688;
+ AOT_Thread_double_negate_address_offset = 696;
static constexpr dart::compiler::target::word AOT_Thread_end_offset = 104;
static constexpr dart::compiler::target::word
AOT_Thread_enter_safepoint_stub_offset = 488;
static constexpr dart::compiler::target::word
- AOT_Thread_execution_state_offset = 1608;
+ AOT_Thread_execution_state_offset = 1624;
static constexpr dart::compiler::target::word
AOT_Thread_exit_safepoint_stub_offset = 496;
static constexpr dart::compiler::target::word
- AOT_Thread_call_native_through_safepoint_stub_offset = 504;
+ AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 504;
static constexpr dart::compiler::target::word
- AOT_Thread_call_native_through_safepoint_entry_point_offset = 624;
+ AOT_Thread_call_native_through_safepoint_stub_offset = 512;
+static constexpr dart::compiler::target::word
+ AOT_Thread_call_native_through_safepoint_entry_point_offset = 632;
static constexpr dart::compiler::target::word
AOT_Thread_fix_allocation_stub_code_offset = 248;
static constexpr dart::compiler::target::word
AOT_Thread_fix_callers_target_code_offset = 240;
static constexpr dart::compiler::target::word
- AOT_Thread_float_absolute_address_offset = 720;
+ AOT_Thread_float_absolute_address_offset = 728;
static constexpr dart::compiler::target::word
- AOT_Thread_float_negate_address_offset = 712;
+ AOT_Thread_float_negate_address_offset = 720;
static constexpr dart::compiler::target::word
- AOT_Thread_float_not_address_offset = 704;
+ AOT_Thread_float_not_address_offset = 712;
static constexpr dart::compiler::target::word
- AOT_Thread_float_zerow_address_offset = 728;
+ AOT_Thread_float_zerow_address_offset = 736;
static constexpr dart::compiler::target::word
- AOT_Thread_global_object_pool_offset = 1584;
+ AOT_Thread_global_object_pool_offset = 1600;
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 = 1640;
+ AOT_Thread_exit_through_ffi_offset = 1656;
static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
- 1696;
+ 1712;
static constexpr dart::compiler::target::word
AOT_Thread_field_table_values_offset = 128;
static constexpr dart::compiler::target::word
@@ -9677,13 +9711,13 @@
static constexpr dart::compiler::target::word
AOT_Thread_marking_stack_block_offset = 160;
static constexpr dart::compiler::target::word
- AOT_Thread_megamorphic_call_checked_entry_offset = 592;
+ AOT_Thread_megamorphic_call_checked_entry_offset = 600;
static constexpr dart::compiler::target::word
- AOT_Thread_switchable_call_miss_entry_offset = 600;
+ AOT_Thread_switchable_call_miss_entry_offset = 608;
static constexpr dart::compiler::target::word
AOT_Thread_switchable_call_miss_stub_offset = 408;
static constexpr dart::compiler::target::word
- AOT_Thread_no_scope_native_wrapper_entry_point_offset = 656;
+ AOT_Thread_no_scope_native_wrapper_entry_point_offset = 664;
static constexpr dart::compiler::target::word
AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
static constexpr dart::compiler::target::word
@@ -9708,17 +9742,17 @@
static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
200;
static constexpr dart::compiler::target::word
- AOT_Thread_predefined_symbols_address_offset = 672;
+ AOT_Thread_predefined_symbols_address_offset = 680;
static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
- 1592;
+ 1608;
static constexpr dart::compiler::target::word
- AOT_Thread_saved_shadow_call_stack_offset = 1600;
+ AOT_Thread_saved_shadow_call_stack_offset = 1616;
static constexpr dart::compiler::target::word
- AOT_Thread_safepoint_state_offset = 1616;
+ AOT_Thread_safepoint_state_offset = 1632;
static constexpr dart::compiler::target::word
AOT_Thread_slow_type_test_stub_offset = 472;
static constexpr dart::compiler::target::word
- AOT_Thread_slow_type_test_entry_point_offset = 640;
+ AOT_Thread_slow_type_test_entry_point_offset = 648;
static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
56;
static constexpr dart::compiler::target::word
@@ -9726,11 +9760,11 @@
static constexpr dart::compiler::target::word
AOT_Thread_stack_overflow_flags_offset = 120;
static constexpr dart::compiler::target::word
- AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+ AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
static constexpr dart::compiler::target::word
AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
static constexpr dart::compiler::target::word
- AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+ AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
static constexpr dart::compiler::target::word
AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
static constexpr dart::compiler::target::word
@@ -9748,19 +9782,19 @@
static constexpr dart::compiler::target::word
AOT_Thread_write_barrier_code_offset = 224;
static constexpr dart::compiler::target::word
- AOT_Thread_write_barrier_entry_point_offset = 512;
+ AOT_Thread_write_barrier_entry_point_offset = 520;
static constexpr dart::compiler::target::word
AOT_Thread_write_barrier_mask_offset = 64;
static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
- 1624;
+ 1640;
static constexpr dart::compiler::target::word
- AOT_Thread_callback_stack_return_offset = 1632;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1664;
+ AOT_Thread_callback_stack_return_offset = 1648;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1680;
static constexpr dart::compiler::target::word
- AOT_Thread_jump_to_frame_entry_point_offset = 632;
+ AOT_Thread_jump_to_frame_entry_point_offset = 640;
static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
- 1672;
+ 1688;
static constexpr dart::compiler::target::word
AOT_TsanUtils_setjmp_function_offset = 0;
static constexpr dart::compiler::target::word
@@ -9844,9 +9878,9 @@
8, 24, 16, 32};
static constexpr dart::compiler::target::word
AOT_Thread_write_barrier_wrappers_thread_offset[] = {
- 1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496,
- 1504, 1512, 1520, 1528, -1, -1, -1, -1, 1536, 1544, -1,
- -1, 1552, 1560, 1568, -1, -1, -1, -1, -1, -1};
+ 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496, 1504, 1512,
+ 1520, 1528, 1536, 1544, -1, -1, -1, -1, 1552, 1560, -1,
+ -1, 1568, 1576, 1584, -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;
@@ -10202,98 +10236,100 @@
static constexpr dart::compiler::target::word
AOT_SubtypeTestCache_cache_offset = 4;
static constexpr dart::compiler::target::word
- AOT_Thread_AllocateArray_entry_point_offset = 380;
+ AOT_Thread_AllocateArray_entry_point_offset = 384;
static constexpr dart::compiler::target::word
- AOT_Thread_active_exception_offset = 752;
+ AOT_Thread_active_exception_offset = 760;
static constexpr dart::compiler::target::word
- AOT_Thread_active_stacktrace_offset = 756;
+ AOT_Thread_active_stacktrace_offset = 764;
static constexpr dart::compiler::target::word
AOT_Thread_array_write_barrier_code_offset = 128;
static constexpr dart::compiler::target::word
- AOT_Thread_array_write_barrier_entry_point_offset = 272;
+ AOT_Thread_array_write_barrier_entry_point_offset = 276;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 280;
+ AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 284;
static constexpr dart::compiler::target::word
AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 188;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 284;
+ AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 288;
static constexpr dart::compiler::target::word
AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 192;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_object_entry_point_offset = 288;
+ AOT_Thread_allocate_object_entry_point_offset = 292;
static constexpr dart::compiler::target::word
AOT_Thread_allocate_object_stub_offset = 196;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_object_parameterized_entry_point_offset = 292;
+ AOT_Thread_allocate_object_parameterized_entry_point_offset = 296;
static constexpr dart::compiler::target::word
AOT_Thread_allocate_object_parameterized_stub_offset = 200;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_object_slow_entry_point_offset = 296;
+ AOT_Thread_allocate_object_slow_entry_point_offset = 300;
static constexpr dart::compiler::target::word
AOT_Thread_allocate_object_slow_stub_offset = 204;
static constexpr dart::compiler::target::word AOT_Thread_api_top_scope_offset =
- 792;
+ 800;
static constexpr dart::compiler::target::word
- AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 344;
+ AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 348;
static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
120;
static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 116;
static constexpr dart::compiler::target::word
- AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 336;
+ AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 340;
static constexpr dart::compiler::target::word
- AOT_Thread_call_to_runtime_entry_point_offset = 276;
+ AOT_Thread_call_to_runtime_entry_point_offset = 280;
static constexpr dart::compiler::target::word
AOT_Thread_call_to_runtime_stub_offset = 144;
static constexpr dart::compiler::target::word AOT_Thread_dart_stream_offset =
- 816;
+ 824;
static constexpr dart::compiler::target::word
AOT_Thread_dispatch_table_array_offset = 44;
static constexpr dart::compiler::target::word
- AOT_Thread_double_truncate_round_supported_offset = 796;
+ AOT_Thread_double_truncate_round_supported_offset = 804;
static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
- 316;
+ 320;
static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
232;
static constexpr dart::compiler::target::word
- AOT_Thread_deoptimize_entry_offset = 320;
+ AOT_Thread_deoptimize_entry_offset = 324;
static constexpr dart::compiler::target::word
AOT_Thread_deoptimize_stub_offset = 236;
static constexpr dart::compiler::target::word
- AOT_Thread_double_abs_address_offset = 360;
+ AOT_Thread_double_abs_address_offset = 364;
static constexpr dart::compiler::target::word
- AOT_Thread_double_negate_address_offset = 356;
+ AOT_Thread_double_negate_address_offset = 360;
static constexpr dart::compiler::target::word AOT_Thread_end_offset = 52;
static constexpr dart::compiler::target::word
AOT_Thread_enter_safepoint_stub_offset = 256;
static constexpr dart::compiler::target::word
- AOT_Thread_execution_state_offset = 772;
+ AOT_Thread_execution_state_offset = 780;
static constexpr dart::compiler::target::word
AOT_Thread_exit_safepoint_stub_offset = 260;
static constexpr dart::compiler::target::word
- AOT_Thread_call_native_through_safepoint_stub_offset = 264;
+ AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 264;
static constexpr dart::compiler::target::word
- AOT_Thread_call_native_through_safepoint_entry_point_offset = 324;
+ AOT_Thread_call_native_through_safepoint_stub_offset = 268;
+static constexpr dart::compiler::target::word
+ AOT_Thread_call_native_through_safepoint_entry_point_offset = 328;
static constexpr dart::compiler::target::word
AOT_Thread_fix_allocation_stub_code_offset = 136;
static constexpr dart::compiler::target::word
AOT_Thread_fix_callers_target_code_offset = 132;
static constexpr dart::compiler::target::word
- AOT_Thread_float_absolute_address_offset = 372;
+ AOT_Thread_float_absolute_address_offset = 376;
static constexpr dart::compiler::target::word
- AOT_Thread_float_negate_address_offset = 368;
+ AOT_Thread_float_negate_address_offset = 372;
static constexpr dart::compiler::target::word
- AOT_Thread_float_not_address_offset = 364;
+ AOT_Thread_float_not_address_offset = 368;
static constexpr dart::compiler::target::word
- AOT_Thread_float_zerow_address_offset = 376;
+ AOT_Thread_float_zerow_address_offset = 380;
static constexpr dart::compiler::target::word
- AOT_Thread_global_object_pool_offset = 760;
+ AOT_Thread_global_object_pool_offset = 768;
static constexpr dart::compiler::target::word
AOT_Thread_invoke_dart_code_stub_offset = 140;
static constexpr dart::compiler::target::word
- AOT_Thread_exit_through_ffi_offset = 788;
+ AOT_Thread_exit_through_ffi_offset = 796;
static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 40;
static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
- 820;
+ 828;
static constexpr dart::compiler::target::word
AOT_Thread_field_table_values_offset = 64;
static constexpr dart::compiler::target::word
@@ -10305,13 +10341,13 @@
static constexpr dart::compiler::target::word
AOT_Thread_marking_stack_block_offset = 80;
static constexpr dart::compiler::target::word
- AOT_Thread_megamorphic_call_checked_entry_offset = 308;
+ AOT_Thread_megamorphic_call_checked_entry_offset = 312;
static constexpr dart::compiler::target::word
- AOT_Thread_switchable_call_miss_entry_offset = 312;
+ AOT_Thread_switchable_call_miss_entry_offset = 316;
static constexpr dart::compiler::target::word
AOT_Thread_switchable_call_miss_stub_offset = 216;
static constexpr dart::compiler::target::word
- AOT_Thread_no_scope_native_wrapper_entry_point_offset = 340;
+ AOT_Thread_no_scope_native_wrapper_entry_point_offset = 344;
static constexpr dart::compiler::target::word
AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 152;
static constexpr dart::compiler::target::word
@@ -10336,16 +10372,16 @@
static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
112;
static constexpr dart::compiler::target::word
- AOT_Thread_predefined_symbols_address_offset = 348;
-static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 764;
+ AOT_Thread_predefined_symbols_address_offset = 352;
+static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset = 772;
static constexpr dart::compiler::target::word
- AOT_Thread_saved_shadow_call_stack_offset = 768;
+ AOT_Thread_saved_shadow_call_stack_offset = 776;
static constexpr dart::compiler::target::word
- AOT_Thread_safepoint_state_offset = 776;
+ AOT_Thread_safepoint_state_offset = 784;
static constexpr dart::compiler::target::word
AOT_Thread_slow_type_test_stub_offset = 248;
static constexpr dart::compiler::target::word
- AOT_Thread_slow_type_test_entry_point_offset = 332;
+ AOT_Thread_slow_type_test_entry_point_offset = 336;
static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
28;
static constexpr dart::compiler::target::word
@@ -10353,11 +10389,11 @@
static constexpr dart::compiler::target::word
AOT_Thread_stack_overflow_flags_offset = 60;
static constexpr dart::compiler::target::word
- AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 304;
+ AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 308;
static constexpr dart::compiler::target::word
AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 212;
static constexpr dart::compiler::target::word
- AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 300;
+ AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 304;
static constexpr dart::compiler::target::word
AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 208;
static constexpr dart::compiler::target::word
@@ -10375,19 +10411,19 @@
static constexpr dart::compiler::target::word
AOT_Thread_write_barrier_code_offset = 124;
static constexpr dart::compiler::target::word
- AOT_Thread_write_barrier_entry_point_offset = 268;
+ AOT_Thread_write_barrier_entry_point_offset = 272;
static constexpr dart::compiler::target::word
AOT_Thread_write_barrier_mask_offset = 32;
static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 36;
static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
- 780;
+ 788;
static constexpr dart::compiler::target::word
- AOT_Thread_callback_stack_return_offset = 784;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 800;
+ AOT_Thread_callback_stack_return_offset = 792;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 808;
static constexpr dart::compiler::target::word
- AOT_Thread_jump_to_frame_entry_point_offset = 328;
+ AOT_Thread_jump_to_frame_entry_point_offset = 332;
static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
- 808;
+ 816;
static constexpr dart::compiler::target::word
AOT_TsanUtils_setjmp_function_offset = 0;
static constexpr dart::compiler::target::word
@@ -10470,7 +10506,7 @@
4, 12, 8, 16};
static constexpr dart::compiler::target::word
AOT_Thread_write_barrier_wrappers_thread_offset[] = {
- 720, 724, 728, 732, 736, -1, 740, -1, 744, 748, -1, -1, -1, -1, -1, -1};
+ 728, 732, 736, 740, 744, -1, 748, -1, 752, 756, -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;
@@ -10825,98 +10861,100 @@
static constexpr dart::compiler::target::word
AOT_SubtypeTestCache_cache_offset = 8;
static constexpr dart::compiler::target::word
- AOT_Thread_AllocateArray_entry_point_offset = 736;
+ AOT_Thread_AllocateArray_entry_point_offset = 744;
static constexpr dart::compiler::target::word
- AOT_Thread_active_exception_offset = 1504;
+ AOT_Thread_active_exception_offset = 1520;
static constexpr dart::compiler::target::word
- AOT_Thread_active_stacktrace_offset = 1512;
+ AOT_Thread_active_stacktrace_offset = 1528;
static constexpr dart::compiler::target::word
AOT_Thread_array_write_barrier_code_offset = 232;
static constexpr dart::compiler::target::word
- AOT_Thread_array_write_barrier_entry_point_offset = 520;
+ AOT_Thread_array_write_barrier_entry_point_offset = 528;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+ AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
static constexpr dart::compiler::target::word
AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+ AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
static constexpr dart::compiler::target::word
AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_object_entry_point_offset = 552;
+ AOT_Thread_allocate_object_entry_point_offset = 560;
static constexpr dart::compiler::target::word
AOT_Thread_allocate_object_stub_offset = 368;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_object_parameterized_entry_point_offset = 560;
+ AOT_Thread_allocate_object_parameterized_entry_point_offset = 568;
static constexpr dart::compiler::target::word
AOT_Thread_allocate_object_parameterized_stub_offset = 376;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_object_slow_entry_point_offset = 568;
+ AOT_Thread_allocate_object_slow_entry_point_offset = 576;
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 =
- 1584;
+ 1600;
static constexpr dart::compiler::target::word
- AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
+ AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 672;
static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
216;
static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
static constexpr dart::compiler::target::word
- AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+ AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 656;
static constexpr dart::compiler::target::word
- AOT_Thread_call_to_runtime_entry_point_offset = 528;
+ AOT_Thread_call_to_runtime_entry_point_offset = 536;
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 =
- 1624;
+ 1640;
static constexpr dart::compiler::target::word
AOT_Thread_dispatch_table_array_offset = 88;
static constexpr dart::compiler::target::word
- AOT_Thread_double_truncate_round_supported_offset = 1592;
+ AOT_Thread_double_truncate_round_supported_offset = 1608;
static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
- 608;
+ 616;
static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
440;
static constexpr dart::compiler::target::word
- AOT_Thread_deoptimize_entry_offset = 616;
+ AOT_Thread_deoptimize_entry_offset = 624;
static constexpr dart::compiler::target::word
AOT_Thread_deoptimize_stub_offset = 448;
static constexpr dart::compiler::target::word
- AOT_Thread_double_abs_address_offset = 696;
+ AOT_Thread_double_abs_address_offset = 704;
static constexpr dart::compiler::target::word
- AOT_Thread_double_negate_address_offset = 688;
+ AOT_Thread_double_negate_address_offset = 696;
static constexpr dart::compiler::target::word AOT_Thread_end_offset = 104;
static constexpr dart::compiler::target::word
AOT_Thread_enter_safepoint_stub_offset = 488;
static constexpr dart::compiler::target::word
- AOT_Thread_execution_state_offset = 1544;
+ AOT_Thread_execution_state_offset = 1560;
static constexpr dart::compiler::target::word
AOT_Thread_exit_safepoint_stub_offset = 496;
static constexpr dart::compiler::target::word
- AOT_Thread_call_native_through_safepoint_stub_offset = 504;
+ AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 504;
static constexpr dart::compiler::target::word
- AOT_Thread_call_native_through_safepoint_entry_point_offset = 624;
+ AOT_Thread_call_native_through_safepoint_stub_offset = 512;
+static constexpr dart::compiler::target::word
+ AOT_Thread_call_native_through_safepoint_entry_point_offset = 632;
static constexpr dart::compiler::target::word
AOT_Thread_fix_allocation_stub_code_offset = 248;
static constexpr dart::compiler::target::word
AOT_Thread_fix_callers_target_code_offset = 240;
static constexpr dart::compiler::target::word
- AOT_Thread_float_absolute_address_offset = 720;
+ AOT_Thread_float_absolute_address_offset = 728;
static constexpr dart::compiler::target::word
- AOT_Thread_float_negate_address_offset = 712;
+ AOT_Thread_float_negate_address_offset = 720;
static constexpr dart::compiler::target::word
- AOT_Thread_float_not_address_offset = 704;
+ AOT_Thread_float_not_address_offset = 712;
static constexpr dart::compiler::target::word
- AOT_Thread_float_zerow_address_offset = 728;
+ AOT_Thread_float_zerow_address_offset = 736;
static constexpr dart::compiler::target::word
- AOT_Thread_global_object_pool_offset = 1520;
+ AOT_Thread_global_object_pool_offset = 1536;
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 = 1576;
+ AOT_Thread_exit_through_ffi_offset = 1592;
static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
- 1632;
+ 1648;
static constexpr dart::compiler::target::word
AOT_Thread_field_table_values_offset = 128;
static constexpr dart::compiler::target::word
@@ -10928,13 +10966,13 @@
static constexpr dart::compiler::target::word
AOT_Thread_marking_stack_block_offset = 160;
static constexpr dart::compiler::target::word
- AOT_Thread_megamorphic_call_checked_entry_offset = 592;
+ AOT_Thread_megamorphic_call_checked_entry_offset = 600;
static constexpr dart::compiler::target::word
- AOT_Thread_switchable_call_miss_entry_offset = 600;
+ AOT_Thread_switchable_call_miss_entry_offset = 608;
static constexpr dart::compiler::target::word
AOT_Thread_switchable_call_miss_stub_offset = 408;
static constexpr dart::compiler::target::word
- AOT_Thread_no_scope_native_wrapper_entry_point_offset = 656;
+ AOT_Thread_no_scope_native_wrapper_entry_point_offset = 664;
static constexpr dart::compiler::target::word
AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
static constexpr dart::compiler::target::word
@@ -10959,17 +10997,17 @@
static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
200;
static constexpr dart::compiler::target::word
- AOT_Thread_predefined_symbols_address_offset = 672;
+ AOT_Thread_predefined_symbols_address_offset = 680;
static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
- 1528;
+ 1544;
static constexpr dart::compiler::target::word
- AOT_Thread_saved_shadow_call_stack_offset = 1536;
+ AOT_Thread_saved_shadow_call_stack_offset = 1552;
static constexpr dart::compiler::target::word
- AOT_Thread_safepoint_state_offset = 1552;
+ AOT_Thread_safepoint_state_offset = 1568;
static constexpr dart::compiler::target::word
AOT_Thread_slow_type_test_stub_offset = 472;
static constexpr dart::compiler::target::word
- AOT_Thread_slow_type_test_entry_point_offset = 640;
+ AOT_Thread_slow_type_test_entry_point_offset = 648;
static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
56;
static constexpr dart::compiler::target::word
@@ -10977,11 +11015,11 @@
static constexpr dart::compiler::target::word
AOT_Thread_stack_overflow_flags_offset = 120;
static constexpr dart::compiler::target::word
- AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+ AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
static constexpr dart::compiler::target::word
AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
static constexpr dart::compiler::target::word
- AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+ AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
static constexpr dart::compiler::target::word
AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
static constexpr dart::compiler::target::word
@@ -10999,19 +11037,19 @@
static constexpr dart::compiler::target::word
AOT_Thread_write_barrier_code_offset = 224;
static constexpr dart::compiler::target::word
- AOT_Thread_write_barrier_entry_point_offset = 512;
+ AOT_Thread_write_barrier_entry_point_offset = 520;
static constexpr dart::compiler::target::word
AOT_Thread_write_barrier_mask_offset = 64;
static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
- 1560;
+ 1576;
static constexpr dart::compiler::target::word
- AOT_Thread_callback_stack_return_offset = 1568;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1600;
+ AOT_Thread_callback_stack_return_offset = 1584;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1616;
static constexpr dart::compiler::target::word
- AOT_Thread_jump_to_frame_entry_point_offset = 632;
+ AOT_Thread_jump_to_frame_entry_point_offset = 640;
static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
- 1608;
+ 1624;
static constexpr dart::compiler::target::word
AOT_TsanUtils_setjmp_function_offset = 0;
static constexpr dart::compiler::target::word
@@ -11095,8 +11133,8 @@
8, 24, 16, 32};
static constexpr dart::compiler::target::word
AOT_Thread_write_barrier_wrappers_thread_offset[] = {
- 1416, 1424, 1432, 1440, -1, -1, 1448, 1456,
- 1464, 1472, 1480, -1, 1488, 1496, -1, -1};
+ 1432, 1440, 1448, 1456, -1, -1, 1464, 1472,
+ 1480, 1488, 1496, -1, 1504, 1512, -1, -1};
static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
24;
static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -11454,98 +11492,100 @@
static constexpr dart::compiler::target::word
AOT_SubtypeTestCache_cache_offset = 8;
static constexpr dart::compiler::target::word
- AOT_Thread_AllocateArray_entry_point_offset = 736;
+ AOT_Thread_AllocateArray_entry_point_offset = 744;
static constexpr dart::compiler::target::word
- AOT_Thread_active_exception_offset = 1568;
+ AOT_Thread_active_exception_offset = 1584;
static constexpr dart::compiler::target::word
- AOT_Thread_active_stacktrace_offset = 1576;
+ AOT_Thread_active_stacktrace_offset = 1592;
static constexpr dart::compiler::target::word
AOT_Thread_array_write_barrier_code_offset = 232;
static constexpr dart::compiler::target::word
- AOT_Thread_array_write_barrier_entry_point_offset = 520;
+ AOT_Thread_array_write_barrier_entry_point_offset = 528;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+ AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
static constexpr dart::compiler::target::word
AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+ AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
static constexpr dart::compiler::target::word
AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_object_entry_point_offset = 552;
+ AOT_Thread_allocate_object_entry_point_offset = 560;
static constexpr dart::compiler::target::word
AOT_Thread_allocate_object_stub_offset = 368;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_object_parameterized_entry_point_offset = 560;
+ AOT_Thread_allocate_object_parameterized_entry_point_offset = 568;
static constexpr dart::compiler::target::word
AOT_Thread_allocate_object_parameterized_stub_offset = 376;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_object_slow_entry_point_offset = 568;
+ AOT_Thread_allocate_object_slow_entry_point_offset = 576;
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 =
- 1648;
+ 1664;
static constexpr dart::compiler::target::word
- AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
+ AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 672;
static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
216;
static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
static constexpr dart::compiler::target::word
- AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+ AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 656;
static constexpr dart::compiler::target::word
- AOT_Thread_call_to_runtime_entry_point_offset = 528;
+ AOT_Thread_call_to_runtime_entry_point_offset = 536;
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 =
- 1688;
+ 1704;
static constexpr dart::compiler::target::word
AOT_Thread_dispatch_table_array_offset = 88;
static constexpr dart::compiler::target::word
- AOT_Thread_double_truncate_round_supported_offset = 1656;
+ AOT_Thread_double_truncate_round_supported_offset = 1672;
static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
- 608;
+ 616;
static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
440;
static constexpr dart::compiler::target::word
- AOT_Thread_deoptimize_entry_offset = 616;
+ AOT_Thread_deoptimize_entry_offset = 624;
static constexpr dart::compiler::target::word
AOT_Thread_deoptimize_stub_offset = 448;
static constexpr dart::compiler::target::word
- AOT_Thread_double_abs_address_offset = 696;
+ AOT_Thread_double_abs_address_offset = 704;
static constexpr dart::compiler::target::word
- AOT_Thread_double_negate_address_offset = 688;
+ AOT_Thread_double_negate_address_offset = 696;
static constexpr dart::compiler::target::word AOT_Thread_end_offset = 104;
static constexpr dart::compiler::target::word
AOT_Thread_enter_safepoint_stub_offset = 488;
static constexpr dart::compiler::target::word
- AOT_Thread_execution_state_offset = 1608;
+ AOT_Thread_execution_state_offset = 1624;
static constexpr dart::compiler::target::word
AOT_Thread_exit_safepoint_stub_offset = 496;
static constexpr dart::compiler::target::word
- AOT_Thread_call_native_through_safepoint_stub_offset = 504;
+ AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 504;
static constexpr dart::compiler::target::word
- AOT_Thread_call_native_through_safepoint_entry_point_offset = 624;
+ AOT_Thread_call_native_through_safepoint_stub_offset = 512;
+static constexpr dart::compiler::target::word
+ AOT_Thread_call_native_through_safepoint_entry_point_offset = 632;
static constexpr dart::compiler::target::word
AOT_Thread_fix_allocation_stub_code_offset = 248;
static constexpr dart::compiler::target::word
AOT_Thread_fix_callers_target_code_offset = 240;
static constexpr dart::compiler::target::word
- AOT_Thread_float_absolute_address_offset = 720;
+ AOT_Thread_float_absolute_address_offset = 728;
static constexpr dart::compiler::target::word
- AOT_Thread_float_negate_address_offset = 712;
+ AOT_Thread_float_negate_address_offset = 720;
static constexpr dart::compiler::target::word
- AOT_Thread_float_not_address_offset = 704;
+ AOT_Thread_float_not_address_offset = 712;
static constexpr dart::compiler::target::word
- AOT_Thread_float_zerow_address_offset = 728;
+ AOT_Thread_float_zerow_address_offset = 736;
static constexpr dart::compiler::target::word
- AOT_Thread_global_object_pool_offset = 1584;
+ AOT_Thread_global_object_pool_offset = 1600;
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 = 1640;
+ AOT_Thread_exit_through_ffi_offset = 1656;
static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
- 1696;
+ 1712;
static constexpr dart::compiler::target::word
AOT_Thread_field_table_values_offset = 128;
static constexpr dart::compiler::target::word
@@ -11557,13 +11597,13 @@
static constexpr dart::compiler::target::word
AOT_Thread_marking_stack_block_offset = 160;
static constexpr dart::compiler::target::word
- AOT_Thread_megamorphic_call_checked_entry_offset = 592;
+ AOT_Thread_megamorphic_call_checked_entry_offset = 600;
static constexpr dart::compiler::target::word
- AOT_Thread_switchable_call_miss_entry_offset = 600;
+ AOT_Thread_switchable_call_miss_entry_offset = 608;
static constexpr dart::compiler::target::word
AOT_Thread_switchable_call_miss_stub_offset = 408;
static constexpr dart::compiler::target::word
- AOT_Thread_no_scope_native_wrapper_entry_point_offset = 656;
+ AOT_Thread_no_scope_native_wrapper_entry_point_offset = 664;
static constexpr dart::compiler::target::word
AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
static constexpr dart::compiler::target::word
@@ -11588,17 +11628,17 @@
static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
200;
static constexpr dart::compiler::target::word
- AOT_Thread_predefined_symbols_address_offset = 672;
+ AOT_Thread_predefined_symbols_address_offset = 680;
static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
- 1592;
+ 1608;
static constexpr dart::compiler::target::word
- AOT_Thread_saved_shadow_call_stack_offset = 1600;
+ AOT_Thread_saved_shadow_call_stack_offset = 1616;
static constexpr dart::compiler::target::word
- AOT_Thread_safepoint_state_offset = 1616;
+ AOT_Thread_safepoint_state_offset = 1632;
static constexpr dart::compiler::target::word
AOT_Thread_slow_type_test_stub_offset = 472;
static constexpr dart::compiler::target::word
- AOT_Thread_slow_type_test_entry_point_offset = 640;
+ AOT_Thread_slow_type_test_entry_point_offset = 648;
static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
56;
static constexpr dart::compiler::target::word
@@ -11606,11 +11646,11 @@
static constexpr dart::compiler::target::word
AOT_Thread_stack_overflow_flags_offset = 120;
static constexpr dart::compiler::target::word
- AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+ AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
static constexpr dart::compiler::target::word
AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
static constexpr dart::compiler::target::word
- AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+ AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
static constexpr dart::compiler::target::word
AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
static constexpr dart::compiler::target::word
@@ -11628,19 +11668,19 @@
static constexpr dart::compiler::target::word
AOT_Thread_write_barrier_code_offset = 224;
static constexpr dart::compiler::target::word
- AOT_Thread_write_barrier_entry_point_offset = 512;
+ AOT_Thread_write_barrier_entry_point_offset = 520;
static constexpr dart::compiler::target::word
AOT_Thread_write_barrier_mask_offset = 64;
static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
- 1624;
+ 1640;
static constexpr dart::compiler::target::word
- AOT_Thread_callback_stack_return_offset = 1632;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1664;
+ AOT_Thread_callback_stack_return_offset = 1648;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1680;
static constexpr dart::compiler::target::word
- AOT_Thread_jump_to_frame_entry_point_offset = 632;
+ AOT_Thread_jump_to_frame_entry_point_offset = 640;
static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
- 1672;
+ 1688;
static constexpr dart::compiler::target::word
AOT_TsanUtils_setjmp_function_offset = 0;
static constexpr dart::compiler::target::word
@@ -11724,9 +11764,9 @@
8, 24, 16, 32};
static constexpr dart::compiler::target::word
AOT_Thread_write_barrier_wrappers_thread_offset[] = {
- 1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496,
- 1504, 1512, 1520, 1528, -1, -1, -1, -1, 1536, 1544, -1,
- -1, 1552, 1560, 1568, -1, -1, -1, -1, -1, -1};
+ 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496, 1504, 1512,
+ 1520, 1528, 1536, 1544, -1, -1, -1, -1, 1552, 1560, -1,
+ -1, 1568, 1576, 1584, -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;
@@ -12080,98 +12120,100 @@
static constexpr dart::compiler::target::word
AOT_SubtypeTestCache_cache_offset = 8;
static constexpr dart::compiler::target::word
- AOT_Thread_AllocateArray_entry_point_offset = 736;
+ AOT_Thread_AllocateArray_entry_point_offset = 744;
static constexpr dart::compiler::target::word
- AOT_Thread_active_exception_offset = 1504;
+ AOT_Thread_active_exception_offset = 1520;
static constexpr dart::compiler::target::word
- AOT_Thread_active_stacktrace_offset = 1512;
+ AOT_Thread_active_stacktrace_offset = 1528;
static constexpr dart::compiler::target::word
AOT_Thread_array_write_barrier_code_offset = 232;
static constexpr dart::compiler::target::word
- AOT_Thread_array_write_barrier_entry_point_offset = 520;
+ AOT_Thread_array_write_barrier_entry_point_offset = 528;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+ AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
static constexpr dart::compiler::target::word
AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+ AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
static constexpr dart::compiler::target::word
AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_object_entry_point_offset = 552;
+ AOT_Thread_allocate_object_entry_point_offset = 560;
static constexpr dart::compiler::target::word
AOT_Thread_allocate_object_stub_offset = 368;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_object_parameterized_entry_point_offset = 560;
+ AOT_Thread_allocate_object_parameterized_entry_point_offset = 568;
static constexpr dart::compiler::target::word
AOT_Thread_allocate_object_parameterized_stub_offset = 376;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_object_slow_entry_point_offset = 568;
+ AOT_Thread_allocate_object_slow_entry_point_offset = 576;
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 =
- 1584;
+ 1600;
static constexpr dart::compiler::target::word
- AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
+ AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 672;
static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
216;
static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
static constexpr dart::compiler::target::word
- AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+ AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 656;
static constexpr dart::compiler::target::word
- AOT_Thread_call_to_runtime_entry_point_offset = 528;
+ AOT_Thread_call_to_runtime_entry_point_offset = 536;
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 =
- 1624;
+ 1640;
static constexpr dart::compiler::target::word
AOT_Thread_dispatch_table_array_offset = 88;
static constexpr dart::compiler::target::word
- AOT_Thread_double_truncate_round_supported_offset = 1592;
+ AOT_Thread_double_truncate_round_supported_offset = 1608;
static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
- 608;
+ 616;
static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
440;
static constexpr dart::compiler::target::word
- AOT_Thread_deoptimize_entry_offset = 616;
+ AOT_Thread_deoptimize_entry_offset = 624;
static constexpr dart::compiler::target::word
AOT_Thread_deoptimize_stub_offset = 448;
static constexpr dart::compiler::target::word
- AOT_Thread_double_abs_address_offset = 696;
+ AOT_Thread_double_abs_address_offset = 704;
static constexpr dart::compiler::target::word
- AOT_Thread_double_negate_address_offset = 688;
+ AOT_Thread_double_negate_address_offset = 696;
static constexpr dart::compiler::target::word AOT_Thread_end_offset = 104;
static constexpr dart::compiler::target::word
AOT_Thread_enter_safepoint_stub_offset = 488;
static constexpr dart::compiler::target::word
- AOT_Thread_execution_state_offset = 1544;
+ AOT_Thread_execution_state_offset = 1560;
static constexpr dart::compiler::target::word
AOT_Thread_exit_safepoint_stub_offset = 496;
static constexpr dart::compiler::target::word
- AOT_Thread_call_native_through_safepoint_stub_offset = 504;
+ AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 504;
static constexpr dart::compiler::target::word
- AOT_Thread_call_native_through_safepoint_entry_point_offset = 624;
+ AOT_Thread_call_native_through_safepoint_stub_offset = 512;
+static constexpr dart::compiler::target::word
+ AOT_Thread_call_native_through_safepoint_entry_point_offset = 632;
static constexpr dart::compiler::target::word
AOT_Thread_fix_allocation_stub_code_offset = 248;
static constexpr dart::compiler::target::word
AOT_Thread_fix_callers_target_code_offset = 240;
static constexpr dart::compiler::target::word
- AOT_Thread_float_absolute_address_offset = 720;
+ AOT_Thread_float_absolute_address_offset = 728;
static constexpr dart::compiler::target::word
- AOT_Thread_float_negate_address_offset = 712;
+ AOT_Thread_float_negate_address_offset = 720;
static constexpr dart::compiler::target::word
- AOT_Thread_float_not_address_offset = 704;
+ AOT_Thread_float_not_address_offset = 712;
static constexpr dart::compiler::target::word
- AOT_Thread_float_zerow_address_offset = 728;
+ AOT_Thread_float_zerow_address_offset = 736;
static constexpr dart::compiler::target::word
- AOT_Thread_global_object_pool_offset = 1520;
+ AOT_Thread_global_object_pool_offset = 1536;
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 = 1576;
+ AOT_Thread_exit_through_ffi_offset = 1592;
static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
- 1632;
+ 1648;
static constexpr dart::compiler::target::word
AOT_Thread_field_table_values_offset = 128;
static constexpr dart::compiler::target::word
@@ -12183,13 +12225,13 @@
static constexpr dart::compiler::target::word
AOT_Thread_marking_stack_block_offset = 160;
static constexpr dart::compiler::target::word
- AOT_Thread_megamorphic_call_checked_entry_offset = 592;
+ AOT_Thread_megamorphic_call_checked_entry_offset = 600;
static constexpr dart::compiler::target::word
- AOT_Thread_switchable_call_miss_entry_offset = 600;
+ AOT_Thread_switchable_call_miss_entry_offset = 608;
static constexpr dart::compiler::target::word
AOT_Thread_switchable_call_miss_stub_offset = 408;
static constexpr dart::compiler::target::word
- AOT_Thread_no_scope_native_wrapper_entry_point_offset = 656;
+ AOT_Thread_no_scope_native_wrapper_entry_point_offset = 664;
static constexpr dart::compiler::target::word
AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
static constexpr dart::compiler::target::word
@@ -12214,17 +12256,17 @@
static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
200;
static constexpr dart::compiler::target::word
- AOT_Thread_predefined_symbols_address_offset = 672;
+ AOT_Thread_predefined_symbols_address_offset = 680;
static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
- 1528;
+ 1544;
static constexpr dart::compiler::target::word
- AOT_Thread_saved_shadow_call_stack_offset = 1536;
+ AOT_Thread_saved_shadow_call_stack_offset = 1552;
static constexpr dart::compiler::target::word
- AOT_Thread_safepoint_state_offset = 1552;
+ AOT_Thread_safepoint_state_offset = 1568;
static constexpr dart::compiler::target::word
AOT_Thread_slow_type_test_stub_offset = 472;
static constexpr dart::compiler::target::word
- AOT_Thread_slow_type_test_entry_point_offset = 640;
+ AOT_Thread_slow_type_test_entry_point_offset = 648;
static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
56;
static constexpr dart::compiler::target::word
@@ -12232,11 +12274,11 @@
static constexpr dart::compiler::target::word
AOT_Thread_stack_overflow_flags_offset = 120;
static constexpr dart::compiler::target::word
- AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+ AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
static constexpr dart::compiler::target::word
AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
static constexpr dart::compiler::target::word
- AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+ AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
static constexpr dart::compiler::target::word
AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
static constexpr dart::compiler::target::word
@@ -12254,19 +12296,19 @@
static constexpr dart::compiler::target::word
AOT_Thread_write_barrier_code_offset = 224;
static constexpr dart::compiler::target::word
- AOT_Thread_write_barrier_entry_point_offset = 512;
+ AOT_Thread_write_barrier_entry_point_offset = 520;
static constexpr dart::compiler::target::word
AOT_Thread_write_barrier_mask_offset = 64;
static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
- 1560;
+ 1576;
static constexpr dart::compiler::target::word
- AOT_Thread_callback_stack_return_offset = 1568;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1600;
+ AOT_Thread_callback_stack_return_offset = 1584;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1616;
static constexpr dart::compiler::target::word
- AOT_Thread_jump_to_frame_entry_point_offset = 632;
+ AOT_Thread_jump_to_frame_entry_point_offset = 640;
static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
- 1608;
+ 1624;
static constexpr dart::compiler::target::word
AOT_TsanUtils_setjmp_function_offset = 0;
static constexpr dart::compiler::target::word
@@ -12350,8 +12392,8 @@
8, 24, 16, 32};
static constexpr dart::compiler::target::word
AOT_Thread_write_barrier_wrappers_thread_offset[] = {
- 1416, 1424, 1432, 1440, -1, -1, 1448, 1456,
- 1464, 1472, 1480, -1, 1488, 1496, -1, -1};
+ 1432, 1440, 1448, 1456, -1, -1, 1464, 1472,
+ 1480, 1488, 1496, -1, 1504, 1512, -1, -1};
static constexpr dart::compiler::target::word AOT_AbstractType_InstanceSize =
24;
static constexpr dart::compiler::target::word AOT_ApiError_InstanceSize = 16;
@@ -12705,98 +12747,100 @@
static constexpr dart::compiler::target::word
AOT_SubtypeTestCache_cache_offset = 8;
static constexpr dart::compiler::target::word
- AOT_Thread_AllocateArray_entry_point_offset = 736;
+ AOT_Thread_AllocateArray_entry_point_offset = 744;
static constexpr dart::compiler::target::word
- AOT_Thread_active_exception_offset = 1568;
+ AOT_Thread_active_exception_offset = 1584;
static constexpr dart::compiler::target::word
- AOT_Thread_active_stacktrace_offset = 1576;
+ AOT_Thread_active_stacktrace_offset = 1592;
static constexpr dart::compiler::target::word
AOT_Thread_array_write_barrier_code_offset = 232;
static constexpr dart::compiler::target::word
- AOT_Thread_array_write_barrier_entry_point_offset = 520;
+ AOT_Thread_array_write_barrier_entry_point_offset = 528;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 536;
+ AOT_Thread_allocate_mint_with_fpu_regs_entry_point_offset = 544;
static constexpr dart::compiler::target::word
AOT_Thread_allocate_mint_with_fpu_regs_stub_offset = 352;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 544;
+ AOT_Thread_allocate_mint_without_fpu_regs_entry_point_offset = 552;
static constexpr dart::compiler::target::word
AOT_Thread_allocate_mint_without_fpu_regs_stub_offset = 360;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_object_entry_point_offset = 552;
+ AOT_Thread_allocate_object_entry_point_offset = 560;
static constexpr dart::compiler::target::word
AOT_Thread_allocate_object_stub_offset = 368;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_object_parameterized_entry_point_offset = 560;
+ AOT_Thread_allocate_object_parameterized_entry_point_offset = 568;
static constexpr dart::compiler::target::word
AOT_Thread_allocate_object_parameterized_stub_offset = 376;
static constexpr dart::compiler::target::word
- AOT_Thread_allocate_object_slow_entry_point_offset = 568;
+ AOT_Thread_allocate_object_slow_entry_point_offset = 576;
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 =
- 1648;
+ 1664;
static constexpr dart::compiler::target::word
- AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 664;
+ AOT_Thread_auto_scope_native_wrapper_entry_point_offset = 672;
static constexpr dart::compiler::target::word AOT_Thread_bool_false_offset =
216;
static constexpr dart::compiler::target::word AOT_Thread_bool_true_offset = 208;
static constexpr dart::compiler::target::word
- AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 648;
+ AOT_Thread_bootstrap_native_wrapper_entry_point_offset = 656;
static constexpr dart::compiler::target::word
- AOT_Thread_call_to_runtime_entry_point_offset = 528;
+ AOT_Thread_call_to_runtime_entry_point_offset = 536;
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 =
- 1688;
+ 1704;
static constexpr dart::compiler::target::word
AOT_Thread_dispatch_table_array_offset = 88;
static constexpr dart::compiler::target::word
- AOT_Thread_double_truncate_round_supported_offset = 1656;
+ AOT_Thread_double_truncate_round_supported_offset = 1672;
static constexpr dart::compiler::target::word AOT_Thread_optimize_entry_offset =
- 608;
+ 616;
static constexpr dart::compiler::target::word AOT_Thread_optimize_stub_offset =
440;
static constexpr dart::compiler::target::word
- AOT_Thread_deoptimize_entry_offset = 616;
+ AOT_Thread_deoptimize_entry_offset = 624;
static constexpr dart::compiler::target::word
AOT_Thread_deoptimize_stub_offset = 448;
static constexpr dart::compiler::target::word
- AOT_Thread_double_abs_address_offset = 696;
+ AOT_Thread_double_abs_address_offset = 704;
static constexpr dart::compiler::target::word
- AOT_Thread_double_negate_address_offset = 688;
+ AOT_Thread_double_negate_address_offset = 696;
static constexpr dart::compiler::target::word AOT_Thread_end_offset = 104;
static constexpr dart::compiler::target::word
AOT_Thread_enter_safepoint_stub_offset = 488;
static constexpr dart::compiler::target::word
- AOT_Thread_execution_state_offset = 1608;
+ AOT_Thread_execution_state_offset = 1624;
static constexpr dart::compiler::target::word
AOT_Thread_exit_safepoint_stub_offset = 496;
static constexpr dart::compiler::target::word
- AOT_Thread_call_native_through_safepoint_stub_offset = 504;
+ AOT_Thread_exit_safepoint_ignore_unwind_in_progress_stub_offset = 504;
static constexpr dart::compiler::target::word
- AOT_Thread_call_native_through_safepoint_entry_point_offset = 624;
+ AOT_Thread_call_native_through_safepoint_stub_offset = 512;
+static constexpr dart::compiler::target::word
+ AOT_Thread_call_native_through_safepoint_entry_point_offset = 632;
static constexpr dart::compiler::target::word
AOT_Thread_fix_allocation_stub_code_offset = 248;
static constexpr dart::compiler::target::word
AOT_Thread_fix_callers_target_code_offset = 240;
static constexpr dart::compiler::target::word
- AOT_Thread_float_absolute_address_offset = 720;
+ AOT_Thread_float_absolute_address_offset = 728;
static constexpr dart::compiler::target::word
- AOT_Thread_float_negate_address_offset = 712;
+ AOT_Thread_float_negate_address_offset = 720;
static constexpr dart::compiler::target::word
- AOT_Thread_float_not_address_offset = 704;
+ AOT_Thread_float_not_address_offset = 712;
static constexpr dart::compiler::target::word
- AOT_Thread_float_zerow_address_offset = 728;
+ AOT_Thread_float_zerow_address_offset = 736;
static constexpr dart::compiler::target::word
- AOT_Thread_global_object_pool_offset = 1584;
+ AOT_Thread_global_object_pool_offset = 1600;
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 = 1640;
+ AOT_Thread_exit_through_ffi_offset = 1656;
static constexpr dart::compiler::target::word AOT_Thread_isolate_offset = 80;
static constexpr dart::compiler::target::word AOT_Thread_isolate_group_offset =
- 1696;
+ 1712;
static constexpr dart::compiler::target::word
AOT_Thread_field_table_values_offset = 128;
static constexpr dart::compiler::target::word
@@ -12808,13 +12852,13 @@
static constexpr dart::compiler::target::word
AOT_Thread_marking_stack_block_offset = 160;
static constexpr dart::compiler::target::word
- AOT_Thread_megamorphic_call_checked_entry_offset = 592;
+ AOT_Thread_megamorphic_call_checked_entry_offset = 600;
static constexpr dart::compiler::target::word
- AOT_Thread_switchable_call_miss_entry_offset = 600;
+ AOT_Thread_switchable_call_miss_entry_offset = 608;
static constexpr dart::compiler::target::word
AOT_Thread_switchable_call_miss_stub_offset = 408;
static constexpr dart::compiler::target::word
- AOT_Thread_no_scope_native_wrapper_entry_point_offset = 656;
+ AOT_Thread_no_scope_native_wrapper_entry_point_offset = 664;
static constexpr dart::compiler::target::word
AOT_Thread_late_initialization_error_shared_with_fpu_regs_stub_offset = 280;
static constexpr dart::compiler::target::word
@@ -12839,17 +12883,17 @@
static constexpr dart::compiler::target::word AOT_Thread_object_null_offset =
200;
static constexpr dart::compiler::target::word
- AOT_Thread_predefined_symbols_address_offset = 672;
+ AOT_Thread_predefined_symbols_address_offset = 680;
static constexpr dart::compiler::target::word AOT_Thread_resume_pc_offset =
- 1592;
+ 1608;
static constexpr dart::compiler::target::word
- AOT_Thread_saved_shadow_call_stack_offset = 1600;
+ AOT_Thread_saved_shadow_call_stack_offset = 1616;
static constexpr dart::compiler::target::word
- AOT_Thread_safepoint_state_offset = 1616;
+ AOT_Thread_safepoint_state_offset = 1632;
static constexpr dart::compiler::target::word
AOT_Thread_slow_type_test_stub_offset = 472;
static constexpr dart::compiler::target::word
- AOT_Thread_slow_type_test_entry_point_offset = 640;
+ AOT_Thread_slow_type_test_entry_point_offset = 648;
static constexpr dart::compiler::target::word AOT_Thread_stack_limit_offset =
56;
static constexpr dart::compiler::target::word
@@ -12857,11 +12901,11 @@
static constexpr dart::compiler::target::word
AOT_Thread_stack_overflow_flags_offset = 120;
static constexpr dart::compiler::target::word
- AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 584;
+ AOT_Thread_stack_overflow_shared_with_fpu_regs_entry_point_offset = 592;
static constexpr dart::compiler::target::word
AOT_Thread_stack_overflow_shared_with_fpu_regs_stub_offset = 400;
static constexpr dart::compiler::target::word
- AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 576;
+ AOT_Thread_stack_overflow_shared_without_fpu_regs_entry_point_offset = 584;
static constexpr dart::compiler::target::word
AOT_Thread_stack_overflow_shared_without_fpu_regs_stub_offset = 392;
static constexpr dart::compiler::target::word
@@ -12879,19 +12923,19 @@
static constexpr dart::compiler::target::word
AOT_Thread_write_barrier_code_offset = 224;
static constexpr dart::compiler::target::word
- AOT_Thread_write_barrier_entry_point_offset = 512;
+ AOT_Thread_write_barrier_entry_point_offset = 520;
static constexpr dart::compiler::target::word
AOT_Thread_write_barrier_mask_offset = 64;
static constexpr dart::compiler::target::word AOT_Thread_heap_base_offset = 72;
static constexpr dart::compiler::target::word AOT_Thread_callback_code_offset =
- 1624;
+ 1640;
static constexpr dart::compiler::target::word
- AOT_Thread_callback_stack_return_offset = 1632;
-static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1664;
+ AOT_Thread_callback_stack_return_offset = 1648;
+static constexpr dart::compiler::target::word AOT_Thread_random_offset = 1680;
static constexpr dart::compiler::target::word
- AOT_Thread_jump_to_frame_entry_point_offset = 632;
+ AOT_Thread_jump_to_frame_entry_point_offset = 640;
static constexpr dart::compiler::target::word AOT_Thread_tsan_utils_offset =
- 1672;
+ 1688;
static constexpr dart::compiler::target::word
AOT_TsanUtils_setjmp_function_offset = 0;
static constexpr dart::compiler::target::word
@@ -12975,9 +13019,9 @@
8, 24, 16, 32};
static constexpr dart::compiler::target::word
AOT_Thread_write_barrier_wrappers_thread_offset[] = {
- 1416, 1424, 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496,
- 1504, 1512, 1520, 1528, -1, -1, -1, -1, 1536, 1544, -1,
- -1, 1552, 1560, 1568, -1, -1, -1, -1, -1, -1};
+ 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1496, 1504, 1512,
+ 1520, 1528, 1536, 1544, -1, -1, -1, -1, 1552, 1560, -1,
+ -1, 1568, 1576, 1584, -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/compiler/runtime_offsets_list.h b/runtime/vm/compiler/runtime_offsets_list.h
index e252e4d..1883b9d 100644
--- a/runtime/vm/compiler/runtime_offsets_list.h
+++ b/runtime/vm/compiler/runtime_offsets_list.h
@@ -223,6 +223,7 @@
FIELD(Thread, enter_safepoint_stub_offset) \
FIELD(Thread, execution_state_offset) \
FIELD(Thread, exit_safepoint_stub_offset) \
+ FIELD(Thread, exit_safepoint_ignore_unwind_in_progress_stub_offset) \
FIELD(Thread, call_native_through_safepoint_stub_offset) \
FIELD(Thread, call_native_through_safepoint_entry_point_offset) \
FIELD(Thread, fix_allocation_stub_code_offset) \
diff --git a/runtime/vm/compiler/stub_code_compiler_arm.cc b/runtime/vm/compiler/stub_code_compiler_arm.cc
index e31e943..602dfb2 100644
--- a/runtime/vm/compiler/stub_code_compiler_arm.cc
+++ b/runtime/vm/compiler/stub_code_compiler_arm.cc
@@ -318,7 +318,8 @@
__ Ret();
}
-void StubCodeCompiler::GenerateExitSafepointStub(Assembler* assembler) {
+static void GenerateExitSafepointStubCommon(Assembler* assembler,
+ uword runtime_entry_offset) {
RegisterSet all_registers;
all_registers.AddAllGeneralRegisters();
__ PushRegisters(all_registers);
@@ -332,7 +333,7 @@
__ LoadImmediate(R0, target::Thread::vm_execution_state());
__ str(R0, Address(THR, target::Thread::execution_state_offset()));
- __ ldr(R0, Address(THR, kExitSafepointRuntimeEntry.OffsetFromThread()));
+ __ ldr(R0, Address(THR, runtime_entry_offset));
__ blx(R0);
RESTORES_LR_FROM_FRAME(__ LeaveFrame((1 << FP) | (1 << LR), 0));
@@ -340,6 +341,18 @@
__ Ret();
}
+void StubCodeCompiler::GenerateExitSafepointStub(Assembler* assembler) {
+ GenerateExitSafepointStubCommon(
+ assembler, kExitSafepointRuntimeEntry.OffsetFromThread());
+}
+
+void StubCodeCompiler::GenerateExitSafepointIgnoreUnwindInProgressStub(
+ Assembler* assembler) {
+ GenerateExitSafepointStubCommon(
+ assembler,
+ kExitSafepointIgnoreUnwindInProgressRuntimeEntry.OffsetFromThread());
+}
+
// Call a native function within a safepoint.
//
// On entry:
@@ -2896,14 +2909,20 @@
#endif
Label exit_through_non_ffi;
Register tmp1 = R0, tmp2 = R1;
- // Check if we exited generated from FFI. If so do transition.
+ // Check if we exited generated from FFI. If so do transition - this is needed
+ // because normally runtime calls transition back to generated via destructor
+ // of TransititionGeneratedToVM/Native that is part of runtime boilerplate
+ // code (see DEFINE_RUNTIME_ENTRY_IMPL in runtime_entry.h). Ffi calls don't
+ // have this boilerplate, don't have this stack resource, have to transition
+ // explicitly.
__ LoadFromOffset(tmp1, THR,
compiler::target::Thread::exit_through_ffi_offset());
__ LoadImmediate(tmp2, target::Thread::exit_through_ffi());
__ cmp(tmp1, Operand(tmp2));
__ b(&exit_through_non_ffi, NE);
__ TransitionNativeToGenerated(tmp1, tmp2,
- /*leave_safepoint=*/true);
+ /*leave_safepoint=*/true,
+ /*ignore_unwind_in_progress=*/true);
__ Bind(&exit_through_non_ffi);
// Set the tag.
diff --git a/runtime/vm/compiler/stub_code_compiler_arm64.cc b/runtime/vm/compiler/stub_code_compiler_arm64.cc
index af8d3c5..bcdc1f4 100644
--- a/runtime/vm/compiler/stub_code_compiler_arm64.cc
+++ b/runtime/vm/compiler/stub_code_compiler_arm64.cc
@@ -250,7 +250,8 @@
__ Ret();
}
-void StubCodeCompiler::GenerateExitSafepointStub(Assembler* assembler) {
+static void GenerateExitSafepointStubCommon(Assembler* assembler,
+ uword runtime_entry_offset) {
RegisterSet all_registers;
all_registers.AddAllGeneralRegisters();
@@ -268,7 +269,7 @@
__ LoadImmediate(R0, target::Thread::vm_execution_state());
__ str(R0, Address(THR, target::Thread::execution_state_offset()));
- __ ldr(R0, Address(THR, kExitSafepointRuntimeEntry.OffsetFromThread()));
+ __ ldr(R0, Address(THR, runtime_entry_offset));
__ blr(R0);
__ mov(SP, CALLEE_SAVED_TEMP2);
@@ -280,6 +281,18 @@
__ Ret();
}
+void StubCodeCompiler::GenerateExitSafepointStub(Assembler* assembler) {
+ GenerateExitSafepointStubCommon(
+ assembler, kExitSafepointRuntimeEntry.OffsetFromThread());
+}
+
+void StubCodeCompiler::GenerateExitSafepointIgnoreUnwindInProgressStub(
+ Assembler* assembler) {
+ GenerateExitSafepointStubCommon(
+ assembler,
+ kExitSafepointIgnoreUnwindInProgressRuntimeEntry.OffsetFromThread());
+}
+
// Calls native code within a safepoint.
//
// On entry:
@@ -3092,13 +3105,19 @@
#endif
Label exit_through_non_ffi;
Register tmp1 = R0, tmp2 = R1;
- // Check if we exited generated from FFI. If so do transition.
+ // Check if we exited generated from FFI. If so do transition - this is needed
+ // because normally runtime calls transition back to generated via destructor
+ // of TransititionGeneratedToVM/Native that is part of runtime boilerplate
+ // code (see DEFINE_RUNTIME_ENTRY_IMPL in runtime_entry.h). Ffi calls don't
+ // have this boilerplate, don't have this stack resource, have to transition
+ // explicitly.
__ LoadFromOffset(tmp1, THR,
compiler::target::Thread::exit_through_ffi_offset());
__ LoadImmediate(tmp2, target::Thread::exit_through_ffi());
__ cmp(tmp1, Operand(tmp2));
__ b(&exit_through_non_ffi, NE);
- __ TransitionNativeToGenerated(tmp1, /*leave_safepoint=*/true);
+ __ TransitionNativeToGenerated(tmp1, /*leave_safepoint=*/true,
+ /*ignore_unwind_in_progress=*/true);
__ Bind(&exit_through_non_ffi);
// Refresh pinned registers values (inc. write barrier mask and null object).
diff --git a/runtime/vm/compiler/stub_code_compiler_ia32.cc b/runtime/vm/compiler/stub_code_compiler_ia32.cc
index 654e0ef..e75588c 100644
--- a/runtime/vm/compiler/stub_code_compiler_ia32.cc
+++ b/runtime/vm/compiler/stub_code_compiler_ia32.cc
@@ -157,7 +157,8 @@
__ ret();
}
-void StubCodeCompiler::GenerateExitSafepointStub(Assembler* assembler) {
+static void GenerateExitSafepointStubCommon(Assembler* assembler,
+ uword runtime_entry_offset) {
__ pushal();
__ subl(SPREG, Immediate(8));
__ movsd(Address(SPREG, 0), XMM0);
@@ -171,7 +172,7 @@
__ movl(Address(THR, target::Thread::execution_state_offset()),
Immediate(target::Thread::vm_execution_state()));
- __ movl(EAX, Address(THR, kExitSafepointRuntimeEntry.OffsetFromThread()));
+ __ movl(EAX, Address(THR, runtime_entry_offset));
__ call(EAX);
__ LeaveFrame();
@@ -181,6 +182,18 @@
__ ret();
}
+void StubCodeCompiler::GenerateExitSafepointStub(Assembler* assembler) {
+ GenerateExitSafepointStubCommon(
+ assembler, kExitSafepointRuntimeEntry.OffsetFromThread());
+}
+
+void StubCodeCompiler::GenerateExitSafepointIgnoreUnwindInProgressStub(
+ Assembler* assembler) {
+ GenerateExitSafepointStubCommon(
+ assembler,
+ kExitSafepointIgnoreUnwindInProgressRuntimeEntry.OffsetFromThread());
+}
+
// Calls a native function inside a safepoint.
//
// On entry:
@@ -2527,12 +2540,18 @@
#endif
Label exit_through_non_ffi;
- // Check if we exited generated from FFI. If so do transition.
+ // Check if we exited generated from FFI. If so do transition - this is needed
+ // because normally runtime calls transition back to generated via destructor
+ // of TransititionGeneratedToVM/Native that is part of runtime boilerplate
+ // code (see DEFINE_RUNTIME_ENTRY_IMPL in runtime_entry.h). Ffi calls don't
+ // have this boilerplate, don't have this stack resource, have to transition
+ // explicitly.
__ cmpl(compiler::Address(
THR, compiler::target::Thread::exit_through_ffi_offset()),
compiler::Immediate(target::Thread::exit_through_ffi()));
__ j(NOT_EQUAL, &exit_through_non_ffi, compiler::Assembler::kNearJump);
- __ TransitionNativeToGenerated(ECX, /*leave_safepoint=*/true);
+ __ TransitionNativeToGenerated(ECX, /*leave_safepoint=*/true,
+ /*ignore_unwind_in_progress=*/true);
__ Bind(&exit_through_non_ffi);
// Set tag.
diff --git a/runtime/vm/compiler/stub_code_compiler_x64.cc b/runtime/vm/compiler/stub_code_compiler_x64.cc
index ae87dca..fb870b5 100644
--- a/runtime/vm/compiler/stub_code_compiler_x64.cc
+++ b/runtime/vm/compiler/stub_code_compiler_x64.cc
@@ -335,7 +335,8 @@
__ ret();
}
-void StubCodeCompiler::GenerateExitSafepointStub(Assembler* assembler) {
+static void GenerateExitSafepointStubCommon(Assembler* assembler,
+ uword runtime_entry_offset) {
RegisterSet all_registers;
all_registers.AddAllGeneralRegisters();
__ PushRegisters(all_registers);
@@ -349,7 +350,7 @@
__ movq(Address(THR, target::Thread::execution_state_offset()),
Immediate(target::Thread::vm_execution_state()));
- __ movq(RAX, Address(THR, kExitSafepointRuntimeEntry.OffsetFromThread()));
+ __ movq(RAX, Address(THR, runtime_entry_offset));
__ CallCFunction(RAX);
__ LeaveFrame();
@@ -357,6 +358,18 @@
__ ret();
}
+void StubCodeCompiler::GenerateExitSafepointStub(Assembler* assembler) {
+ GenerateExitSafepointStubCommon(
+ assembler, kExitSafepointRuntimeEntry.OffsetFromThread());
+}
+
+void StubCodeCompiler::GenerateExitSafepointIgnoreUnwindInProgressStub(
+ Assembler* assembler) {
+ GenerateExitSafepointStubCommon(
+ assembler,
+ kExitSafepointIgnoreUnwindInProgressRuntimeEntry.OffsetFromThread());
+}
+
// Calls native code within a safepoint.
//
// On entry:
@@ -3140,12 +3153,18 @@
#error Unimplemented
#endif
Label exit_through_non_ffi;
- // Check if we exited generated from FFI. If so do transition.
+ // Check if we exited generated from FFI. If so do transition - this is needed
+ // because normally runtime calls transition back to generated via destructor
+ // of TransititionGeneratedToVM/Native that is part of runtime boilerplate
+ // code (see DEFINE_RUNTIME_ENTRY_IMPL in runtime_entry.h). Ffi calls don't
+ // have this boilerplate, don't have this stack resource, have to transition
+ // explicitly.
__ cmpq(compiler::Address(
THR, compiler::target::Thread::exit_through_ffi_offset()),
compiler::Immediate(target::Thread::exit_through_ffi()));
__ j(NOT_EQUAL, &exit_through_non_ffi, compiler::Assembler::kNearJump);
- __ TransitionNativeToGenerated(/*leave_safepoint=*/true);
+ __ TransitionNativeToGenerated(/*leave_safepoint=*/true,
+ /*ignore_unwind_in_progress=*/true);
__ Bind(&exit_through_non_ffi);
// Set the tag.
diff --git a/runtime/vm/dart.cc b/runtime/vm/dart.cc
index 9f78ed8..1f74527 100644
--- a/runtime/vm/dart.cc
+++ b/runtime/vm/dart.cc
@@ -7,7 +7,6 @@
#include "vm/dart.h"
-#include "platform/thread_sanitizer.h"
#include "vm/app_snapshot.h"
#include "vm/code_observers.h"
#include "vm/compiler/runtime_offsets_extracted.h"
@@ -51,13 +50,6 @@
#include "vm/virtual_memory.h"
#include "vm/zone.h"
-#if defined(USING_THREAD_SANITIZER)
-// TODO(https://github.com/dart-lang/sdk/issues/46699): Remove.
-// TODO(https://bugs.fuchsia.dev/p/fuchsia/issues/detail?id=83298): Remove.
-#include "unicode/uchar.h"
-#include "unicode/uniset.h"
-#endif
-
namespace dart {
DECLARE_FLAG(bool, print_class_table);
@@ -273,13 +265,6 @@
Dart_CodeObserver* observer,
Dart_PostTaskCallback post_task,
void* post_task_data) {
-#if defined(USING_THREAD_SANITIZER)
- // Trigger lazy initialization in ICU to avoid spurious TSAN warning.
- // TODO(https://github.com/dart-lang/sdk/issues/46699): Remove.
- // TODO(https://bugs.fuchsia.dev/p/fuchsia/issues/detail?id=83298): Remove.
- u_getPropertyValueEnum(UCHAR_SCRIPT, "foo");
-#endif
-
CheckOffsets();
if (!Flags::Initialized()) {
@@ -343,6 +328,7 @@
Isolate::InitVM();
UserTags::Init();
PortMap::Init();
+ Service::Init();
FreeListElement::Init();
ForwardingCorpse::Init();
Api::Init();
@@ -802,6 +788,7 @@
ShutdownIsolate();
vm_isolate_ = NULL;
ASSERT(Isolate::IsolateListLength() == 0);
+ Service::Cleanup();
PortMap::Cleanup();
UserTags::Cleanup();
IsolateGroup::Cleanup();
diff --git a/runtime/vm/exceptions.cc b/runtime/vm/exceptions.cc
index fc6e47b..41c46cf 100644
--- a/runtime/vm/exceptions.cc
+++ b/runtime/vm/exceptions.cc
@@ -650,6 +650,9 @@
ExcpHandler func =
reinterpret_cast<ExcpHandler>(StubCode::JumpToFrame().EntryPoint());
+ if (thread->is_unwind_in_progress()) {
+ thread->SetUnwindErrorInProgress(true);
+ }
func(program_counter, stack_pointer, frame_pointer, thread);
#endif
diff --git a/runtime/vm/experimental_features.cc b/runtime/vm/experimental_features.cc
index f272686..5200b16 100644
--- a/runtime/vm/experimental_features.cc
+++ b/runtime/vm/experimental_features.cc
@@ -6,7 +6,7 @@
// Instead modify 'tools/experimental_features.yaml' and run
// 'dart tools/generate_experimental_flags.dart' to update.
//
-// Current version: 2.16.0
+// Current version: 2.17.0
#include "vm/experimental_features.h"
diff --git a/runtime/vm/experimental_features.h b/runtime/vm/experimental_features.h
index 020ba59..d1a5abb 100644
--- a/runtime/vm/experimental_features.h
+++ b/runtime/vm/experimental_features.h
@@ -6,7 +6,7 @@
// Instead modify 'tools/experimental_features.yaml' and run
// 'dart tools/generate_experimental_flags.dart' to update.
//
-// Current version: 2.16.0
+// Current version: 2.17.0
#ifndef RUNTIME_VM_EXPERIMENTAL_FEATURES_H_
#define RUNTIME_VM_EXPERIMENTAL_FEATURES_H_
diff --git a/runtime/vm/heap/scavenger.h b/runtime/vm/heap/scavenger.h
index ca75d9a..bc626a5 100644
--- a/runtime/vm/heap/scavenger.h
+++ b/runtime/vm/heap/scavenger.h
@@ -439,7 +439,9 @@
RelaxedAtomic<bool> failed_to_promote_;
RelaxedAtomic<bool> abort_;
- bool growth_control_;
+ // When the isolate group is ready it will enable growth control via
+ // InitGrowthControl.
+ bool growth_control_ = false;
// Protects new space during the allocation of new TLABs
mutable Mutex space_lock_;
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index ab78804..360c4a4 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -68,6 +68,7 @@
class CodeStatistics;
class IsolateGroupReloadContext;
class ObjectGraphCopier;
+class NativeArguments;
#define REUSABLE_FORWARD_DECLARATION(name) class Reusable##name##HandleScope;
REUSABLE_HANDLE_LIST(REUSABLE_FORWARD_DECLARATION)
@@ -236,6 +237,8 @@
OBJECT_SERVICE_SUPPORT(object) \
friend class Object;
+extern "C" void DFLRT_ExitSafepoint(NativeArguments __unusable_);
+
#define HEAP_OBJECT_IMPLEMENTATION(object, super) \
OBJECT_IMPLEMENTATION(object, super); \
Untagged##object* untag() const { \
@@ -244,7 +247,8 @@
} \
SNAPSHOT_SUPPORT(object) \
friend class StackFrame; \
- friend class Thread;
+ friend class Thread; \
+ friend void DFLRT_ExitSafepoint(NativeArguments __unusable_);
// This macro is used to denote types that do not have a sub-type.
#define FINAL_HEAP_OBJECT_IMPLEMENTATION_HELPER(object, rettype, super) \
@@ -270,7 +274,8 @@
SNAPSHOT_SUPPORT(rettype) \
friend class Object; \
friend class StackFrame; \
- friend class Thread;
+ friend class Thread; \
+ friend void DFLRT_ExitSafepoint(NativeArguments __unusable_);
#define FINAL_HEAP_OBJECT_IMPLEMENTATION(object, super) \
FINAL_HEAP_OBJECT_IMPLEMENTATION_HELPER(object, object, super)
diff --git a/runtime/vm/object_reload.cc b/runtime/vm/object_reload.cc
index d4ed8d0..9fdbffd 100644
--- a/runtime/vm/object_reload.cc
+++ b/runtime/vm/object_reload.cc
@@ -325,9 +325,13 @@
{
field = old_enum.LookupStaticField(Symbols::Values());
- ASSERT(!field.IsNull() && field.is_static() && field.is_const());
- old_enum_values ^= field.StaticConstFieldValue();
- ASSERT(!old_enum_values.IsNull());
+ if (!field.IsNull()) {
+ ASSERT(field.is_static() && field.is_const());
+ old_enum_values ^= field.StaticConstFieldValue();
+ ASSERT(!old_enum_values.IsNull());
+ } else {
+ old_enum_values = Array::empty_array().ptr();
+ }
field = old_enum.LookupStaticField(Symbols::_DeletedEnumSentinel());
ASSERT(!field.IsNull() && field.is_static() && field.is_const());
@@ -357,9 +361,13 @@
bool enums_deleted = false;
{
field = LookupStaticField(Symbols::Values());
- ASSERT(!field.IsNull() && field.is_static() && field.is_const());
- enum_values ^= field.StaticConstFieldValue();
- ASSERT(!enum_values.IsNull());
+ if (!field.IsNull()) {
+ ASSERT(field.is_static() && field.is_const());
+ enum_values ^= field.StaticConstFieldValue();
+ ASSERT(!enum_values.IsNull());
+ } else {
+ enum_values = Array::empty_array().ptr();
+ }
field = LookupStaticField(Symbols::_DeletedEnumSentinel());
ASSERT(!field.IsNull() && field.is_static() && field.is_const());
diff --git a/runtime/vm/object_store.cc b/runtime/vm/object_store.cc
index 9fc1c99..b7c1cb3 100644
--- a/runtime/vm/object_store.cc
+++ b/runtime/vm/object_store.cc
@@ -87,6 +87,10 @@
set_preallocated_unhandled_exception(UnhandledException::Handle(
zone, UnhandledException::New(Instance::Cast(out_of_memory),
preallocated_stack_trace)));
+ const UnwindError& preallocated_unwind_error =
+ UnwindError::Handle(zone, UnwindError::New(String::Handle(
+ zone, String::New("isolate is exiting"))));
+ set_preallocated_unwind_error(preallocated_unwind_error);
return Error::null();
}
diff --git a/runtime/vm/object_store.h b/runtime/vm/object_store.h
index 03125b2..19689f0 100644
--- a/runtime/vm/object_store.h
+++ b/runtime/vm/object_store.h
@@ -308,6 +308,7 @@
#define ISOLATE_OBJECT_STORE_FIELD_LIST(R_, RW) \
RW(UnhandledException, preallocated_unhandled_exception) \
RW(StackTrace, preallocated_stack_trace) \
+ RW(UnwindError, preallocated_unwind_error) \
RW(Array, dart_args_1) \
RW(Array, dart_args_2) \
R_(GrowableObjectArray, resume_capabilities) \
diff --git a/runtime/vm/runtime_entry.cc b/runtime/vm/runtime_entry.cc
index c693c02..b5b7854 100644
--- a/runtime/vm/runtime_entry.cc
+++ b/runtime/vm/runtime_entry.cc
@@ -3608,11 +3608,47 @@
ASSERT(thread->top_exit_frame_info() != 0);
ASSERT(thread->execution_state() == Thread::kThreadInVM);
+ if (thread->is_unwind_in_progress()) {
+ // Clean up safepoint unwind error marker to prevent safepoint tripping.
+ // The safepoint marker will get restored just before jumping back
+ // to generated code.
+ thread->SetUnwindErrorInProgress(false);
+ NoSafepointScope no_safepoint;
+ Error unwind_error;
+ unwind_error ^=
+ thread->isolate()->isolate_object_store()->preallocated_unwind_error();
+ Exceptions::PropagateError(unwind_error);
+ }
thread->ExitSafepoint();
+
TRACE_RUNTIME_CALL("%s", "ExitSafepoint done");
}
DEFINE_RAW_LEAF_RUNTIME_ENTRY(ExitSafepoint, 0, false, &DFLRT_ExitSafepoint);
+// This is expected to be invoked when jumping to destination frame,
+// during exception handling.
+extern "C" void DFLRT_ExitSafepointIgnoreUnwindInProgress(
+ NativeArguments __unusable_) {
+ CHECK_STACK_ALIGNMENT;
+ TRACE_RUNTIME_CALL("%s", "ExitSafepointIgnoreUnwindInProgress");
+ Thread* thread = Thread::Current();
+ ASSERT(thread->top_exit_frame_info() != 0);
+
+ ASSERT(thread->execution_state() == Thread::kThreadInVM);
+
+ // Compared to ExitSafepoint above we are going to ignore
+ // is_unwind_in_progress flag because this is called as part of JumpToFrame
+ // exception handler - we want this transition to complete so that the next
+ // safepoint check does error propagation.
+ thread->ExitSafepoint();
+
+ TRACE_RUNTIME_CALL("%s", "ExitSafepointIgnoreUnwindInProgress done");
+}
+DEFINE_RAW_LEAF_RUNTIME_ENTRY(ExitSafepointIgnoreUnwindInProgress,
+ 0,
+ false,
+ &DFLRT_ExitSafepointIgnoreUnwindInProgress);
+
// Not registered as a runtime entry because we can't use Thread to look it up.
static Thread* GetThreadForNativeCallback(uword callback_id,
uword return_address) {
diff --git a/runtime/vm/runtime_entry_list.h b/runtime/vm/runtime_entry_list.h
index 0fa921a..5731d55 100644
--- a/runtime/vm/runtime_entry_list.h
+++ b/runtime/vm/runtime_entry_list.h
@@ -96,6 +96,7 @@
uword /*SmiPtr*/, uword /*SmiPtr*/, uword /*SmiPtr*/) \
V(void, EnterSafepoint) \
V(void, ExitSafepoint) \
+ V(void, ExitSafepointIgnoreUnwindInProgress) \
V(ApiLocalScope*, EnterHandleScope, Thread*) \
V(void, ExitHandleScope, Thread*) \
V(LocalHandle*, AllocateHandle, ApiLocalScope*) \
diff --git a/runtime/vm/service.cc b/runtime/vm/service.cc
index 38e0d75..2f2a075 100644
--- a/runtime/vm/service.cc
+++ b/runtime/vm/service.cc
@@ -72,6 +72,56 @@
"Print a message when an isolate is paused but there is no "
"debugger attached.");
+DEFINE_FLAG(
+ charp,
+ log_service_response_sizes,
+ nullptr,
+ "Log sizes of service responses and events to a file in CSV format.");
+
+void* Service::service_response_size_log_file_ = nullptr;
+
+void Service::LogResponseSize(const char* method, JSONStream* js) {
+ if (service_response_size_log_file_ == nullptr) {
+ return;
+ }
+ Dart_FileWriteCallback file_write = Dart::file_write_callback();
+ char* entry =
+ OS::SCreate(nullptr, "%s, %" Pd "\n", method, js->buffer()->length());
+ (*file_write)(entry, strlen(entry), service_response_size_log_file_);
+ free(entry);
+}
+
+void Service::Init() {
+ if (FLAG_log_service_response_sizes == nullptr) {
+ return;
+ }
+ Dart_FileOpenCallback file_open = Dart::file_open_callback();
+ Dart_FileWriteCallback file_write = Dart::file_write_callback();
+ Dart_FileCloseCallback file_close = Dart::file_close_callback();
+ if ((file_open == nullptr) || (file_write == nullptr) ||
+ (file_close == nullptr)) {
+ OS::PrintErr("Error: Could not access file callbacks.");
+ UNREACHABLE();
+ }
+ ASSERT(service_response_size_log_file_ == nullptr);
+ service_response_size_log_file_ =
+ (*file_open)(FLAG_log_service_response_sizes, true);
+ if (service_response_size_log_file_ == nullptr) {
+ OS::PrintErr("Warning: Failed to open service response size log file: %s\n",
+ FLAG_log_service_response_sizes);
+ return;
+ }
+}
+
+void Service::Cleanup() {
+ if (service_response_size_log_file_ == nullptr) {
+ return;
+ }
+ Dart_FileCloseCallback file_close = Dart::file_close_callback();
+ (*file_close)(service_response_size_log_file_);
+ service_response_size_log_file_ = nullptr;
+}
+
static void PrintInvalidParamError(JSONStream* js, const char* param) {
#if !defined(PRODUCT)
js->PrintError(kInvalidParams, "%s: invalid '%s' parameter: %s", js->method(),
@@ -988,6 +1038,7 @@
return T->StealStickyError();
}
method->entry(T, &js);
+ Service::LogResponseSize(c_method_name, &js);
js.PostReply();
return T->StealStickyError();
}
@@ -1239,6 +1290,8 @@
}
}
+ Service::LogResponseSize(kind, event);
+
// Message is of the format [<stream id>, <json string>].
//
// Build the event message in the C heap to avoid dart heap
diff --git a/runtime/vm/service.h b/runtime/vm/service.h
index 751c1e5..d6324d9 100644
--- a/runtime/vm/service.h
+++ b/runtime/vm/service.h
@@ -89,6 +89,9 @@
class Service : public AllStatic {
public:
+ static void Init();
+ static void Cleanup();
+
// Handles a message which is not directed to an isolate.
static ErrorPtr HandleRootMessage(const Array& message);
@@ -159,6 +162,9 @@
const Instance& id,
const Error& error);
+ // Logs the size of the contents of `js` to FLAG_log_service_response_sizes.
+ static void LogResponseSize(const char* method, JSONStream* js);
+
// Enable/Disable timeline categories.
// Returns True if the categories were successfully enabled, False otherwise.
static bool EnableTimelineStreams(char* categories_list);
@@ -250,6 +256,8 @@
static Dart_GetVMServiceAssetsArchive get_service_assets_callback_;
static Dart_EmbedderInformationCallback embedder_information_callback_;
+ static void* service_response_size_log_file_;
+
static const uint8_t* dart_library_kernel_;
static intptr_t dart_library_kernel_len_;
};
diff --git a/runtime/vm/stub_code_list.h b/runtime/vm/stub_code_list.h
index fa7b06b..778e08c 100644
--- a/runtime/vm/stub_code_list.h
+++ b/runtime/vm/stub_code_list.h
@@ -125,6 +125,7 @@
V(OneArgOptimizedCheckInlineCacheWithExactnessCheck) \
V(EnterSafepoint) \
V(ExitSafepoint) \
+ V(ExitSafepointIgnoreUnwindInProgress) \
V(CallNativeThroughSafepoint) \
V(InitStaticField) \
V(InitLateStaticField) \
diff --git a/runtime/vm/thread.h b/runtime/vm/thread.h
index ed9e9b7..be48283 100644
--- a/runtime/vm/thread.h
+++ b/runtime/vm/thread.h
@@ -151,6 +151,8 @@
StubCode::LazySpecializeTypeTest().ptr(), nullptr) \
V(CodePtr, enter_safepoint_stub_, StubCode::EnterSafepoint().ptr(), nullptr) \
V(CodePtr, exit_safepoint_stub_, StubCode::ExitSafepoint().ptr(), nullptr) \
+ V(CodePtr, exit_safepoint_ignore_unwind_in_progress_stub_, \
+ StubCode::ExitSafepointIgnoreUnwindInProgress().ptr(), nullptr) \
V(CodePtr, call_native_through_safepoint_stub_, \
StubCode::CallNativeThroughSafepoint().ptr(), nullptr)
@@ -565,7 +567,10 @@
bool is_unwind_in_progress() const { return is_unwind_in_progress_; }
- void StartUnwindError() { is_unwind_in_progress_ = true; }
+ void StartUnwindError() {
+ is_unwind_in_progress_ = true;
+ SetUnwindErrorInProgress(true);
+ }
#if defined(DEBUG)
void EnterCompiler() {
@@ -813,6 +818,9 @@
* - Bit 4 of the safepoint_state_ field is used to indicate that the thread
* is blocked at a (deopt)safepoint and has to be woken up once the
* (deopt)safepoint operation is complete.
+ * - Bit 6 of the safepoint_state_ field is used to indicate that the isolate
+ * running on this thread has triggered unwind error, which requires
+ * enforced exit on a transition from native back to generated.
*
* The safepoint execution state (described above) for a thread is stored in
* in the execution_state_ field.
@@ -903,6 +911,15 @@
static uword SetBypassSafepoints(bool value, uword state) {
return BypassSafepointsField::update(value, state);
}
+ bool UnwindErrorInProgress() const {
+ return UnwindErrorInProgressField::decode(safepoint_state_);
+ }
+ void SetUnwindErrorInProgress(bool value) {
+ safepoint_state_ =
+ UnwindErrorInProgressField::update(value, safepoint_state_);
+ }
+
+ uword safepoint_state() { return safepoint_state_; }
enum ExecutionState {
kThreadInVM = 0,
@@ -1210,6 +1227,8 @@
1> {};
class BypassSafepointsField
: public BitField<uword, bool, BlockedForSafepointField::kNextBit, 1> {};
+ class UnwindErrorInProgressField
+ : public BitField<uword, bool, BypassSafepointsField::kNextBit, 1> {};
static uword AtSafepointBits(SafepointLevel level) {
switch (level) {
diff --git a/runtime/vm/unit_test.cc b/runtime/vm/unit_test.cc
index a2478ad..5242592 100644
--- a/runtime/vm/unit_test.cc
+++ b/runtime/vm/unit_test.cc
@@ -667,7 +667,7 @@
return Api::NewHandle(thread, val.ptr());
}
-#if !defined(PRODUCT) && defined(TARGET_ARCH_IA32)
+#if !defined(PRODUCT) && (defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64))
static bool IsHex(int c) {
return ('0' <= c && c <= '9') || ('a' <= c && c <= 'f');
}
@@ -705,9 +705,11 @@
}
Disassembler::Disassemble(start, start + assembler_->CodeSize(), disassembly_,
DISASSEMBLY_SIZE);
-#if defined(TARGET_ARCH_IA32)
- // Blank out absolute addressing constants, since they are not stable from run
- // to run.
+#if defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64)
+ // Blank out absolute addressing constants on ia32, since they are not stable
+ // from run to run.
+ // Blank out thread-relative offsets on x64 since they change when new fields
+ // are added to thread object.
bool in_hex_constant = false;
for (char* p = disassembly_; *p != '\0'; p++) {
if (in_hex_constant) {
@@ -717,14 +719,24 @@
in_hex_constant = false;
}
} else {
+#if defined(TARGET_ARCH_IA32)
if (*p == '[' && *(p + 1) == '0' && *(p + 2) == 'x' && IsHex(*(p + 3)) &&
IsHex(*(p + 4))) {
p += 2;
in_hex_constant = true;
}
+#endif // defined(TARGET_ARCH_IA32)
+#if defined(TARGET_ARCH_X64)
+ if (*p == '[' && *(p + 1) == 't' && *(p + 2) == 'h' && *(p + 3) == 'r' &&
+ *(p + 4) == '+' && *(p + 5) == '0' && *(p + 6) == 'x' &&
+ IsHex(*(p + 7)) && IsHex(*(p + 8))) {
+ p += 6;
+ in_hex_constant = true;
+ }
+#endif // defined(TARGET_ARCH_X64)
}
}
-#endif // TARGET_ARCH_IA32
+#endif // defined(TARGET_ARCH_IA32) || defined(TARGET_ARCH_X64)
#endif // !PRODUCT
}
diff --git a/sdk/lib/PRESUBMIT.py b/sdk/lib/PRESUBMIT.py
new file mode 100644
index 0000000..21b779b
--- /dev/null
+++ b/sdk/lib/PRESUBMIT.py
@@ -0,0 +1,71 @@
+#!/usr/bin/env python3
+# Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
+# for details. All rights reserved. Use of this source code is governed by a
+# BSD-style license that can be found in the LICENSE file.
+"""sdk/lib specific presubmit script.
+
+See http://dev.chromium.org/developers/how-tos/depottools/presubmit-scripts
+for more details about the presubmit API built into gcl.
+"""
+
+import imp
+import os.path
+import subprocess
+
+USE_PYTHON3 = True
+
+
+def runSmokeTest(input_api, output_api):
+ hasChangedFiles = False
+ for git_file in input_api.AffectedTextFiles():
+ filename = git_file.AbsoluteLocalPath()
+ if filename.endswith('libraries.yaml') or filename.endswith(
+ 'libraries.json'):
+ hasChangedFiles = True
+ break
+
+ if hasChangedFiles:
+ local_root = input_api.change.RepositoryRoot()
+ utils = imp.load_source('utils',
+ os.path.join(local_root, 'tools', 'utils.py'))
+ dart = os.path.join(utils.CheckedInSdkPath(), 'bin', 'dart')
+ yaml2json = os.path.join(local_root, 'tools', 'yaml2json.dart')
+ libYaml = os.path.join(local_root, 'sdk', 'lib', 'libraries.yaml')
+ libJson = os.path.join(local_root, 'sdk', 'lib', 'libraries.json')
+
+ windows = utils.GuessOS() == 'win32'
+ if windows:
+ dart += '.exe'
+
+ if not os.path.isfile(dart):
+ print('WARNING: dart not found: %s' % dart)
+ return []
+
+ if not os.path.isfile(yaml2json):
+ print('WARNING: yaml2json not found: %s' % yaml2json)
+ return []
+
+ args = [
+ dart, yaml2json, libYaml, libJson, '--check',
+ '--relative=' + local_root + '/'
+ ]
+ process = subprocess.Popen(args,
+ stdout=subprocess.PIPE,
+ stdin=subprocess.PIPE)
+ outs, _ = process.communicate()
+
+ if process.returncode != 0:
+ return [
+ output_api.PresubmitError('lib/sdk smoketest failure(s)',
+ long_text=outs)
+ ]
+
+ return []
+
+
+def CheckChangeOnCommit(input_api, output_api):
+ return runSmokeTest(input_api, output_api)
+
+
+def CheckChangeOnUpload(input_api, output_api):
+ return runSmokeTest(input_api, output_api)
diff --git a/sdk/lib/_internal/js_dev_runtime/patch/core_patch.dart b/sdk/lib/_internal/js_dev_runtime/patch/core_patch.dart
index 6b133cb..95b46d6 100644
--- a/sdk/lib/_internal/js_dev_runtime/patch/core_patch.dart
+++ b/sdk/lib/_internal/js_dev_runtime/patch/core_patch.dart
@@ -166,6 +166,22 @@
}
@patch
+class WeakReference<T extends Object> {
+ @patch
+ factory WeakReference(T object) {
+ throw UnimplementedError("WeakReference");
+ }
+}
+
+@patch
+class Finalizer<T> {
+ @patch
+ factory Finalizer(void Function(T) object) {
+ throw UnimplementedError("Finalizer");
+ }
+}
+
+@patch
class int {
@patch
static int parse(String source,
diff --git a/sdk/lib/_internal/js_runtime/lib/core_patch.dart b/sdk/lib/_internal/js_runtime/lib/core_patch.dart
index 9579a76..529682d 100644
--- a/sdk/lib/_internal/js_runtime/lib/core_patch.dart
+++ b/sdk/lib/_internal/js_runtime/lib/core_patch.dart
@@ -118,6 +118,22 @@
}
@patch
+class WeakReference<T extends Object> {
+ @patch
+ factory WeakReference(T object) {
+ throw UnimplementedError("WeakReference");
+ }
+}
+
+@patch
+class Finalizer<T> {
+ @patch
+ factory Finalizer(void Function(T) object) {
+ throw UnimplementedError("Finalizer");
+ }
+}
+
+@patch
class int {
@patch
static int parse(String source,
diff --git a/sdk/lib/_internal/vm/lib/compact_hash.dart b/sdk/lib/_internal/vm/lib/compact_hash.dart
index f9b905b..a39e324 100644
--- a/sdk/lib/_internal/vm/lib/compact_hash.dart
+++ b/sdk/lib/_internal/vm/lib/compact_hash.dart
@@ -532,11 +532,18 @@
}
void forEach(void f(K key, V value)) {
- var ki = keys.iterator;
- var vi = values.iterator;
- while (ki.moveNext()) {
- vi.moveNext();
- f(ki.current, vi.current);
+ final data = _data;
+ final checkSum = _checkSum;
+ final len = _usedData;
+ for (int offset = 0; offset < len; offset += 2) {
+ final current = data[offset];
+ if (_HashBase._isDeleted(data, current)) continue;
+ final key = internal.unsafeCast<K>(current);
+ final value = internal.unsafeCast<V>(data[offset + 1]);
+ f(key, value);
+ if (_isModifiedSince(data, checkSum)) {
+ throw ConcurrentModificationError(this);
+ }
}
}
diff --git a/sdk/lib/_internal/vm/lib/expando_patch.dart b/sdk/lib/_internal/vm/lib/expando_patch.dart
index f707102..be89c3e 100644
--- a/sdk/lib/_internal/vm/lib/expando_patch.dart
+++ b/sdk/lib/_internal/vm/lib/expando_patch.dart
@@ -166,3 +166,19 @@
List<_WeakProperty?> _data;
int _used; // Number of used (active and deleted) slots.
}
+
+@patch
+class WeakReference<T extends Object> {
+ @patch
+ factory WeakReference(T object) {
+ throw UnimplementedError("WeakReference");
+ }
+}
+
+@patch
+class Finalizer<T> {
+ @patch
+ factory Finalizer(void Function(T) object) {
+ throw UnimplementedError("Finalizer");
+ }
+}
diff --git a/sdk/lib/_internal/vm/lib/isolate_patch.dart b/sdk/lib/_internal/vm/lib/isolate_patch.dart
index 37fb390..6e3aabf 100644
--- a/sdk/lib/_internal/vm/lib/isolate_patch.dart
+++ b/sdk/lib/_internal/vm/lib/isolate_patch.dart
@@ -312,7 +312,7 @@
static Isolate get current => _currentIsolate;
@patch
- String get debugName => _getDebugName(controlPort);
+ String? get debugName => _getDebugName(controlPort);
@patch
static Future<Uri?> get packageRoot {
diff --git a/sdk/lib/core/core.dart b/sdk/lib/core/core.dart
index 3799c08..324a84b 100644
--- a/sdk/lib/core/core.dart
+++ b/sdk/lib/core/core.dart
@@ -181,7 +181,6 @@
part "enum.dart";
part "errors.dart";
part "exceptions.dart";
-part "expando.dart";
part "function.dart";
part "identical.dart";
part "int.dart";
@@ -206,3 +205,4 @@
part "symbol.dart";
part "type.dart";
part "uri.dart";
+part "weak.dart";
diff --git a/sdk/lib/core/core_sources.gni b/sdk/lib/core/core_sources.gni
index 66362e9..12f70fb 100644
--- a/sdk/lib/core/core_sources.gni
+++ b/sdk/lib/core/core_sources.gni
@@ -16,7 +16,6 @@
"enum.dart",
"errors.dart",
"exceptions.dart",
- "expando.dart",
"function.dart",
"identical.dart",
"int.dart",
@@ -41,4 +40,5 @@
"symbol.dart",
"type.dart",
"uri.dart",
+ "weak.dart",
]
diff --git a/sdk/lib/core/expando.dart b/sdk/lib/core/expando.dart
deleted file mode 100644
index bcdee49..0000000
--- a/sdk/lib/core/expando.dart
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright (c) 2012, 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.
-
-part of dart.core;
-
-/// An [Expando] allows adding new properties to objects.
-///
-/// Does not work on numbers, strings, booleans, `null`, `dart:ffi` pointers,
-/// `dart:ffi` structs, or `dart:ffi` unions.
-///
-/// An `Expando` does not hold on to the added property value after an object
-/// becomes inaccessible.
-///
-/// Since you can always create a new number that is identical to an existing
-/// number, it means that an expando property on a number could never be
-/// released. To avoid this, expando properties cannot be added to numbers.
-/// The same argument applies to strings, booleans and `null`, which also have
-/// literals that evaluate to identical values when they occur more than once.
-///
-/// There is no restriction on other classes, even for compile time constant
-/// objects. Be careful if adding expando properties to compile time constants,
-/// since they will stay alive forever.
-class Expando<T extends Object> {
- /// The name of the this [Expando] as passed to the constructor. If
- /// no name was passed to the constructor, the name is `null`.
- final String? name;
-
- /// Creates a new [Expando]. The optional name is only used for
- /// debugging purposes and creating two different [Expando]s with the
- /// same name yields two [Expando]s that work on different properties
- /// of the objects they are used on.
- external Expando([String? name]);
-
- /// Expando toString method override.
- String toString() => "Expando:$name";
-
- /// Gets the value of this [Expando]'s property on the given
- /// object. If the object hasn't been expanded, the method returns
- /// `null`.
- ///
- /// The object must not be a number, a string, a boolean, `null`, a
- /// `dart:ffi` pointer, a `dart:ffi` struct, or a `dart:ffi` union.
- external T? operator [](Object object);
-
- /// Sets the value of this [Expando]'s property on the given
- /// object. Properties can effectively be removed again by setting
- /// their value to `null`.
- ///
- /// The object must not be a number, a string, a boolean, `null`, a
- /// `dart:ffi` pointer, a `dart:ffi` struct, or a `dart:ffi` union.
- external void operator []=(Object object, T? value);
-}
diff --git a/sdk/lib/core/pattern.dart b/sdk/lib/core/pattern.dart
index 7facb38..dbf7a23 100644
--- a/sdk/lib/core/pattern.dart
+++ b/sdk/lib/core/pattern.dart
@@ -20,6 +20,20 @@
/// and then from the end of the previous match (but always
/// at least one position later than the *start* of the previous
/// match, in case the pattern matches an empty substring).
+ /// ```dart
+ /// RegExp exp = RegExp(r'(\w+)');
+ /// var str = 'Dash is a bird';
+ /// Iterable<Match> matches = exp.allMatches(str, 8);
+ /// for (final Match m in matches) {
+ /// String match = m[0]!;
+ /// print(match);
+ /// }
+ /// ```
+ /// The output of the example is:
+ /// ```
+ /// a
+ /// bird
+ /// ```
Iterable<Match> allMatches(String string, [int start = 0]);
/// Matches this pattern against the start of `string`.
@@ -29,6 +43,15 @@
/// at that point.
///
/// The [start] must be non-negative and no greater than `string.length`.
+ /// ```dart
+ /// final string = 'Dash is a bird';
+ ///
+ /// var regExp = RegExp(r'bird');
+ /// var match = regExp.matchAsPrefix(string, 10); // Match found.
+ ///
+ /// regExp = RegExp(r'bird');
+ /// match = regExp.matchAsPrefix(string); // null
+ /// ```
Match? matchAsPrefix(String string, [int start = 0]);
}
diff --git a/sdk/lib/core/weak.dart b/sdk/lib/core/weak.dart
new file mode 100644
index 0000000..17f5d31
--- /dev/null
+++ b/sdk/lib/core/weak.dart
@@ -0,0 +1,246 @@
+// Copyright (c) 2012, 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.
+
+part of dart.core;
+
+/// An [Expando] allows adding new properties to objects.
+///
+/// Does not work on numbers, strings, booleans, `null`, `dart:ffi` pointers,
+/// `dart:ffi` structs, or `dart:ffi` unions.
+///
+/// An `Expando` does not hold on to the added property value after an object
+/// becomes inaccessible.
+///
+/// Since you can always create a new number that is identical to an existing
+/// number, it means that an expando property on a number could never be
+/// released. To avoid this, expando properties cannot be added to numbers.
+/// The same argument applies to strings, booleans and `null`, which also have
+/// literals that evaluate to identical values when they occur more than once.
+///
+/// There is no restriction on other classes, even for compile time constant
+/// objects. Be careful if adding expando properties to compile time constants,
+/// since they will stay alive forever.
+class Expando<T extends Object> {
+ /// The name of the this [Expando] as passed to the constructor.
+ ///
+ /// If no name was passed to the constructor, the value is the `null` value.
+ final String? name;
+
+ /// Creates a new [Expando]. The optional name is only used for
+ /// debugging purposes and creating two different [Expando]s with the
+ /// same name yields two [Expando]s that work on different properties
+ /// of the objects they are used on.
+ external Expando([String? name]);
+
+ /// Expando toString method override.
+ String toString() => "Expando:$name";
+
+ /// Gets the value of this [Expando]'s property on the given object.
+ ///
+ /// If the object hasn't been expanded, the result is the `null` value.
+ ///
+ /// The object must not be a number, a string, a boolean, `null`, a
+ /// `dart:ffi` pointer, a `dart:ffi` struct, or a `dart:ffi` union.
+ external T? operator [](Object object);
+
+ /// Sets this [Expando]'s property value on the given object to [value].
+ ///
+ /// Properties can effectively be removed again
+ /// by setting their value to `null`.
+ ///
+ /// The object must not be a number, a string, a boolean, `null`, a
+ /// `dart:ffi` pointer, a `dart:ffi` struct, or a `dart:ffi` union.
+ external void operator []=(Object object, T? value);
+}
+
+/// A weak reference to a Dart object.
+///
+/// A _weak_ reference to the [target] object which may be cleared
+/// (set to reference `null` instead) at any time
+/// when there is no other ways for the program to access the target object.
+///
+/// _Being the target of a weak reference does not keep an object
+/// from being garbage collected._
+///
+/// There are no guarantees that a weak reference will ever be cleared
+/// even if all references to its target are weak references.
+///
+/// Not all objects are supported as targets for weak references.
+/// The [WeakReference] constructor will reject any object that is not
+/// supported as an [Expando] key.
+@Since("2.17")
+abstract class WeakReference<T extends Object> {
+ /// Creates a [WeakReference] pointing to the given [target].
+ ///
+ /// The [target] must be an object supported as an [Expando] key,
+ /// which means [target] cannot be a number, a string, a boolean,
+ /// the `null` value, or certain other types of special objects.
+ external factory WeakReference(T target);
+
+ /// The current object weakly referenced by [this], if any.
+ ///
+ /// The value is either the object supplied in the constructor,
+ /// or `null` if the weak reference has been cleared.
+ T? get target;
+}
+
+/// A finalizer which can be attached to Dart objects.
+///
+/// A finalizer can create attachments between
+/// the finalizer and any number of Dart values,
+/// by calling [attach] with the value, along with a
+/// _finalization token_ and an optional _attach key_,
+/// which are part of the attachment.
+///
+/// When a Dart value becomes inaccessible to the program,
+/// any finalizer that currently has an attachment to
+/// the value *may* have its callback function called
+/// with the attachment's finalization token.
+///
+/// Example:
+/// ```dart template:none
+/// // Keep the finalizer itself reachable, otherwise might not do anything.
+/// final Finalizer<DBConnection> _finalizer = Finalizer((connection) {
+/// connection.close();
+/// });
+///
+/// /// Access the database.
+/// Database connect() {
+/// // Wraps the connection in a nicer user-facing API,
+/// // *and* closes connection if the user forgets to.
+/// var connection = _connectToDatabase();
+/// var wrapper = Database._fromConnection(connection, _finalizer);
+/// // Get finalizer callback when `wrapper` is no longer reachable.
+/// _finalizer.attach(wrapper, connection, detach: wrapper);
+/// return wrapper;
+/// }
+///
+/// class Database {
+/// final DBConnection _connection;
+/// final Finalizer<Connection> _finalizer;
+/// Database._fromConnection(this._connection, this._finalizer);
+///
+/// // Some useful methods.
+///
+/// void close() {
+/// // User requested close.
+/// _connection.close();
+/// // Detach from finalizer, no longer needed.
+/// _finalizer.detach(this);
+/// }
+/// }
+/// ```
+/// This example has an example of an external resource that needs clean-up.
+/// The finalizer is used to clean up an external connection when the
+/// user of the API no longer has access to that connection.
+/// The example uses the same object as attached object and detach key,
+/// which is a useful approach when each attached object can be detached
+/// individually. Being a detachment key doesn't keep an object alive.
+///
+/// No promises are made that the callback will ever be called.
+/// The only thing that is guaranteed is that if a finalizer's callback
+/// is called with a specific finalization token as argument,
+/// then at least one value with an attachment to to the finalizer
+/// that has that finalization token,
+/// is no longer accessible to the program.
+///
+/// If the finalzier *itself* becomes unreachable,
+/// it's allowed to be garbage collected
+/// and then it won't trigger any further callbacks.
+/// Always make sure to keep the finalizer itself reachable while it's needed.
+///
+/// If multiple finalizers are attached to a single object,
+/// or the same finalizer is attached multiple times to an object,
+/// and that object becomes inaccessible to the program,
+/// then any number (including zero) of those attachments may trigger
+/// their associated finalizer's callback.
+/// It will not necessarily be all or none of them.
+///
+/// Finalization callbacks will happen as *events*.
+/// They will not happen during execution of other code,
+/// and not as a microtask,
+/// but as high-level events similar to timer events.
+///
+/// Finalization callbacks must not throw.
+@Since("2.17")
+abstract class Finalizer<T> {
+ /// Creates a finalizer with the given finalization callback.
+ ///
+ /// The [callback] is bound to the current zone
+ /// when the [Finalizer] is created, and will run in that zone when called.
+ external factory Finalizer(void Function(T) callback);
+
+ /// Attaches this finalizer to [value].
+ ///
+ /// When [value] is longer accessible to the program,
+ /// while still having an attachement to this finalizer,
+ /// the callback of this finalizer *may* be called
+ /// with [finalizationToken] as argument.
+ /// The callback may be called at most once per active attachment,
+ /// ones which have not been detached by calling [Finalizer.detach].
+ ///
+ /// If a non-`null` [detach] value is provided, that object can be
+ /// passed to [Finalizer.detach] to remove the attachment again.
+ ///
+ /// The [value] and [detach] arguments do not count towards those
+ /// objects being accessible to the program.
+ /// Both must be objects supported as an [Expando] key.
+ /// They may be the *same* object.
+ ///
+ /// Example:
+ /// ```dart template:top
+ /// /// Access the data base.
+ /// Database connect() {
+ /// // Wraps the connection in a nice user API,
+ /// // *and* closes connection if the user forgets to.
+ /// var connection = _connectToDatabase();
+ /// var wrapper = Database._fromConnection(connection, _finalizer);
+ /// // Get finalizer callback when `wrapper` is no longer reachable.
+ /// _finalizer.attach(wrapper, connection, detach: wrapper);
+ /// return wrapper;
+ /// }
+ /// ````
+ ///
+ /// Multiple objects may be attached using the same finalization token,
+ /// and the finalizer can be attached multiple times to the same object
+ /// with different, or the same, finalization token.
+ void attach(Object value, T finalizationToken, {Object? detach});
+
+ /// Detaches the finalizer from values attached with [detachToken].
+ ///
+ /// Each attachment between this finalizer and a value,
+ /// which was created by calling [attach] with the [detachToken] object as
+ /// `detach` argument, is removed.
+ ///
+ /// If the finalizer was attached multiple times to the same value
+ /// with different detachment keys,
+ /// only those attachments which used [detachToken] are removed.
+ ///
+ /// After detaching, an attachment won't cause any callbacks to happen
+ /// if the object become inaccessible.
+ ///
+ /// Example:
+ /// ```dart template:none
+ /// final Finalizer<DBConnection> _finalizer = Finalizer((connection) {
+ /// connection.close();
+ /// });
+ ///
+ /// class Database {
+ /// final DBConnection _connection;
+ /// final Finalizer<Connection> _finalizer;
+ /// Database._fromConnection(this._connection, this._finalizer);
+ ///
+ /// // Some useful methods.
+ ///
+ /// void close() {
+ /// // User requested close.
+ /// _connection.close();
+ /// // Detach from finalizer, no longer needed.
+ /// // Was attached using this object as `detach` token.
+ /// _finalizer.detach(this);
+ /// }
+ /// }
+ /// ```
+ void detach(Object detachToken);
+}
diff --git a/tools/VERSION b/tools/VERSION
index 65a1042..d4dc248 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -25,7 +25,7 @@
#
CHANNEL dev
MAJOR 2
-MINOR 16
+MINOR 17
PATCH 0
-PRERELEASE 160
+PRERELEASE 0
PRERELEASE_PATCH 0
\ No newline at end of file
diff --git a/tools/bots/flutter/analyze_flutter_flutter.sh b/tools/bots/flutter/analyze_flutter_flutter.sh
index fbfb264..6fa0425 100755
--- a/tools/bots/flutter/analyze_flutter_flutter.sh
+++ b/tools/bots/flutter/analyze_flutter_flutter.sh
@@ -11,10 +11,6 @@
dart=$checkout/out/ReleaseX64/dart-sdk/bin/dart
sdk=$checkout/out/ReleaseX64/dart-sdk
tmpdir=$(mktemp -d)
-cleanup() {
- rm -rf "$tmpdir"
-}
-trap cleanup EXIT HUP INT QUIT TERM PIPE
cd "$tmpdir"
git clone --single-branch -vv \
@@ -37,6 +33,3 @@
# Test flutter's use of data-driven fixes.
$dart fix packages/flutter/test_fixes --compare-to-golden
-
-# Analyze the sample code in dartdoc snippets.
-PUB_CACHE=$checkout/.pub_cache $dart dev/bots/analyze_sample_code.dart
diff --git a/tools/bots/test_matrix.json b/tools/bots/test_matrix.json
index ed2057e..1312a27 100644
--- a/tools/bots/test_matrix.json
+++ b/tools/bots/test_matrix.json
@@ -3443,6 +3443,15 @@
]
},
{
+ "name": "analyze pkg/dds_service_extensions",
+ "script": "out/ReleaseX64/dart-sdk/bin/dart",
+ "arguments": [
+ "analyze",
+ "--fatal-infos",
+ "pkg/dds_service_extensions"
+ ]
+ },
+ {
"name": "analyze runtime/observatory",
"script": "out/ReleaseX64/dart-sdk/bin/dart",
"arguments": [
diff --git a/tools/bots/try_benchmarks.sh b/tools/bots/try_benchmarks.sh
index 2fb96f0..3d7f966 100755
--- a/tools/bots/try_benchmarks.sh
+++ b/tools/bots/try_benchmarks.sh
@@ -296,7 +296,7 @@
out/ReleaseX64/kernel-service.dart.snapshot \
out/ReleaseX64/run_vm_tests \
third_party/d8/linux/x64 \
- third_party/firefox_jsshell/linux/ \
+ third_party/firefox_jsshell/ \
out/ReleaseX64/dart_precompiled_runtime \
out/ReleaseX64/gen/utils/dartdevc/kernel/ \
out/ReleaseX64/ddc_outline.dill \
@@ -333,9 +333,9 @@
out/ReleaseX64/dart-sdk/bin/dart2js --sound-null-safety --packages=.packages --out=out.js -m hello.dart
third_party/d8/linux/x64/d8 --stack_size=1024 sdk/lib/_internal/js_runtime/lib/preambles/d8.js out.js
out/ReleaseX64/dart-sdk/bin/dart2js --packages=.packages --out=out.js -m hello.dart
- LD_LIBRARY_PATH=third_party/firefox_jsshell/linux/jsshell/ third_party/firefox_jsshell/linux/jsshell/js -f sdk/lib/_internal/js_runtime/lib/preambles/jsshell.js -f out.js
+ LD_LIBRARY_PATH=third_party/firefox_jsshell/ third_party/firefox_jsshell/js -f sdk/lib/_internal/js_runtime/lib/preambles/jsshell.js -f out.js
out/ReleaseX64/dart-sdk/bin/dart2js --sound-null-safety --packages=.packages --out=out.js -m hello.dart
- LD_LIBRARY_PATH=third_party/firefox_jsshell/linux/jsshell/ third_party/firefox_jsshell/linux/jsshell/js -f sdk/lib/_internal/js_runtime/lib/preambles/jsshell.js -f out.js
+ LD_LIBRARY_PATH=third_party/firefox_jsshell/ third_party/firefox_jsshell/js -f sdk/lib/_internal/js_runtime/lib/preambles/jsshell.js -f out.js
out/ReleaseX64/dart-sdk/bin/dart2js --benchmarking-production --packages=.packages --out=out.js -m hello.dart
third_party/d8/linux/x64/d8 --stack_size=1024 sdk/lib/_internal/js_runtime/lib/preambles/d8.js out.js
out/ReleaseX64/dart-sdk/bin/dart2js --sound-null-safety --benchmarking-production --packages=.packages --out=out.js -m hello.dart
diff --git a/tools/experimental_features.yaml b/tools/experimental_features.yaml
index 3ca32be..d4c4bb8 100644
--- a/tools/experimental_features.yaml
+++ b/tools/experimental_features.yaml
@@ -103,7 +103,7 @@
# default 'language' "category" with code generated for both CFE and Analyzer,
# while other categories can be tailored more specifically.
-current-version: '2.16.0'
+current-version: '2.17.0'
features:
variance:
diff --git a/tools/yaml2json.dart b/tools/yaml2json.dart
index abf313d..50eba45 100644
--- a/tools/yaml2json.dart
+++ b/tools/yaml2json.dart
@@ -10,12 +10,19 @@
import 'package:yaml/yaml.dart' show loadYaml;
-main(List<String> arguments) {
+main(List<String> rawArguments) {
var port = new RawReceivePort();
bool check = false;
- if (arguments.contains('--check')) {
- arguments = arguments.toList()..remove('--check');
- check = true;
+ String? relative;
+ List<String> arguments = [];
+ for (String argument in rawArguments) {
+ if (argument == '--check') {
+ check = true;
+ } else if (argument.startsWith('--relative=')) {
+ relative = argument.substring('--relative='.length);
+ } else {
+ arguments.add(argument);
+ }
}
if (arguments.length != 2) {
stderr.writeln("Usage: yaml2json.dart input.yaml output.json [--check]");
@@ -23,11 +30,22 @@
}
Uri input = Uri.base.resolve(arguments[0]);
Uri output = Uri.base.resolve(arguments[1]);
+ String inputString = arguments[0];
+ String outputString = arguments[1];
+ if (relative != null) {
+ String relativeTo = Uri.base.resolve(relative).toString();
+ if (input.toString().startsWith(relativeTo)) {
+ inputString = input.toString().substring(relativeTo.length);
+ }
+ if (output.toString().startsWith(relativeTo)) {
+ outputString = output.toString().substring(relativeTo.length);
+ }
+ }
Map yaml = loadYaml(new File.fromUri(input).readAsStringSync());
Map<String, dynamic> result = new Map<String, dynamic>();
result["comment:0"] = "NOTE: THIS FILE IS GENERATED. DO NOT EDIT.";
result["comment:1"] =
- "Instead modify '${arguments[0]}' and follow the instructions therein.";
+ "Instead modify '$inputString' and follow the instructions therein.";
for (String key in yaml.keys) {
result[key] = yaml[key];
}
@@ -41,9 +59,9 @@
}
if (needsUpdate) {
stderr.write('''
-The file ${arguments[1]} is not up to date. Regenerate using
+The file $outputString is not up to date. Regenerate using
- dart tools/yaml2json.dart ${arguments[0]} ${arguments[1]}
+ dart tools/yaml2json.dart $inputString $outputString
''');
exit(1);
}