Version 2.14.0-346.0.dev
Merge commit '51d10c8c041030f97dd5d2b713783e7ea683629d' into 'dev'
diff --git a/.dart_tool/package_config.json b/.dart_tool/package_config.json
index c3b657c..1a0cb9e 100644
--- a/.dart_tool/package_config.json
+++ b/.dart_tool/package_config.json
@@ -11,7 +11,7 @@
"constraint, update this by running tools/generate_package_config.dart."
],
"configVersion": 2,
- "generated": "2021-07-20T10:43:52.568177",
+ "generated": "2021-07-22T12:39:20.084398",
"generator": "tools/generate_package_config.dart",
"packages": [
{
@@ -354,12 +354,6 @@
"languageVersion": "2.12"
},
{
- "name": "http_retry",
- "rootUri": "../third_party/pkg/http_retry",
- "packageUri": "lib/",
- "languageVersion": "2.12"
- },
- {
"name": "http_throttle",
"rootUri": "../third_party/pkg/http_throttle",
"packageUri": "lib/",
diff --git a/DEPS b/DEPS
index 653673b..d1df738 100644
--- a/DEPS
+++ b/DEPS
@@ -87,7 +87,7 @@
"clock_rev" : "a494269254ba978e7ef8f192c5f7fec3fc05b9d3",
"collection_rev": "75a7a5510979a3cd70143af85bcc1667ee233674",
"convert_rev": "413f591577419d8a8b95d445094a82c926650bd1",
- "crypto_rev": "1c8ccc07b83b100216dc6dede767371043385648",
+ "crypto_rev": "b5024e4de2b1c474dd558bef593ddbf0bfade152",
"csslib_rev": "e411d862fd8cc50415c1badf2632e017373b3f47",
"dart2js_info_rev" : "e0acfeb5affdf94c53067e68bd836adf589628fd",
@@ -116,8 +116,7 @@
"http_io_rev": "2fa188caf7937e313026557713f7feffedd4978b",
"http_multi_server_rev": "de1b312164c24a1690b46c6e97bd47eff40c4649",
"http_parser_rev": "7720bfd42a0c096734c5213478fdce92c62f0293",
- "http_retry_rev": "845771af7bb5ab38ab740ce4a31f3b0c7680302b",
- "http_rev": "f93c76fabdb03963303762e3fe16cbdf60799cff",
+ "http_rev": "778174bca2c13becd88ef3353309190b1e8b9479",
"http_throttle_tag" : "1.0.2",
"icu_rev" : "81d656878ec611cb0b42d52c82e9dae93920d9ba",
"idl_parser_rev": "5fb1ebf49d235b5a70c9f49047e83b0654031eb7",
@@ -134,7 +133,7 @@
"mockito_rev": "d39ac507483b9891165e422ec98d9fb480037c8b",
"oauth2_rev": "7cd3284049fe5badbec9f2bea2afc41d14c01057",
"package_config_rev": "a84c0d45401f215fbe9384df923a38f4022a3c45",
- "path_rev": "407ab76187fade41c31e39c745b39661b710106c",
+ "path_rev": "c20d73c3516d3a0061c90f14b761ff532b9bf707",
"pedantic_rev": "66f2f6c27581c7936482e83be80b27be2719901c",
"platform_rev": "c20e6fa315e9f8820e51c0ae721f63aff33b8e17",
"ply_rev": "604b32590ffad5cbb82e4afef1d305512d06ae93",
@@ -370,9 +369,6 @@
"@" + Var("http_multi_server_rev"),
Var("dart_root") + "/third_party/pkg/http_parser":
Var("dart_git") + "http_parser.git" + "@" + Var("http_parser_rev"),
- Var("dart_root") + "/third_party/pkg/http_retry":
- Var("dart_git") + "http_retry.git" +
- "@" + Var("http_retry_rev"),
Var("dart_root") + "/third_party/pkg/http_throttle":
Var("dart_git") + "http_throttle.git" +
"@" + Var("http_throttle_tag"),
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index c7726fb..7c40e38 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -80,7 +80,7 @@
/// TODO(scheglov) Clean up the list of implicitly analyzed files.
class AnalysisDriver implements AnalysisDriverGeneric {
/// The version of data format, should be incremented on every format change.
- static const int DATA_VERSION = 161;
+ static const int DATA_VERSION = 163;
/// The number of exception contexts allowed to write. Once this field is
/// zero, we stop writing any new exception contexts in this process.
diff --git a/pkg/analyzer/lib/src/macro/api/code.dart b/pkg/analyzer/lib/src/macro/api/code.dart
index 0c06310..a3fed07 100644
--- a/pkg/analyzer/lib/src/macro/api/code.dart
+++ b/pkg/analyzer/lib/src/macro/api/code.dart
@@ -6,19 +6,23 @@
/// Must only contain [Code] or [String] instances.
String _combineParts(List<Object> parts) {
var buffer = StringBuffer();
- for (var part in parts) {
+
+ void write(Object part) {
if (part is String) {
buffer.write(part);
} else if (part is Code) {
buffer.write(part.code);
- } else if (part is List<Code>) {
- buffer.write(part.map((p) => p.code).join());
+ } else if (part is Iterable<Object>) {
+ part.forEach(write);
} else {
throw UnsupportedError(
- 'Only String, Code, and List<Code> are allowed but got $part',
+ 'Only String, Code, and List(s) of them are '
+ 'allowed but got ${part.runtimeType}',
);
}
}
+
+ write(parts);
return buffer.toString();
}
@@ -38,7 +42,7 @@
Declaration(this.code);
/// Creates a [Declaration] from [parts], which must be of type [Code],
- /// `List<Code>`, or [String].
+ /// [String], or [Iterable]s of them.
factory Declaration.fromParts(List<Object> parts) =>
Declaration(_combineParts(parts));
}
@@ -52,7 +56,7 @@
Fragment(this.code);
/// Creates a [Fragment] from [parts], which must be of type [Code],
- /// `List<Code>`, or [String].
+ /// [String], or [Iterable]s of them.
factory Fragment.fromParts(List<Object> parts) =>
Fragment(_combineParts(parts));
}
diff --git a/pkg/analyzer/lib/src/summary2/function_type_builder.dart b/pkg/analyzer/lib/src/summary2/function_type_builder.dart
index f59a117..4ab0f6a 100644
--- a/pkg/analyzer/lib/src/summary2/function_type_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/function_type_builder.dart
@@ -190,7 +190,7 @@
} else if (isNNBD) {
nullabilitySuffix = NullabilitySuffix.none;
} else {
- nullabilitySuffix = NullabilitySuffix.question;
+ nullabilitySuffix = NullabilitySuffix.star;
}
return FunctionTypeBuilder(
diff --git a/pkg/analyzer/lib/src/summary2/library_builder.dart b/pkg/analyzer/lib/src/summary2/library_builder.dart
index e500aa1..3cb1a0f 100644
--- a/pkg/analyzer/lib/src/summary2/library_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/library_builder.dart
@@ -2,7 +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.
-import 'package:analyzer/dart/analysis/features.dart';
import 'package:analyzer/dart/ast/ast.dart' as ast;
import 'package:analyzer/dart/element/element.dart';
import 'package:analyzer/src/dart/ast/ast.dart' as ast;
@@ -161,7 +160,7 @@
void resolveTypes(NodesToBuildType nodesToBuildType) {
for (var linkingUnit in units) {
- var resolver = _newTypeReferenceResolver(nodesToBuildType, linkingUnit);
+ var resolver = ReferenceResolver(linker, nodesToBuildType, element);
linkingUnit.node.accept(resolver);
}
}
@@ -212,7 +211,7 @@
{
var nodesToBuildType = NodesToBuildType();
var resolver =
- _newTypeReferenceResolver(nodesToBuildType, linkingUnit);
+ ReferenceResolver(linker, nodesToBuildType, element);
for (var newMember in newMembers) {
newMember.accept(resolver);
}
@@ -258,21 +257,6 @@
}
}
- ReferenceResolver _newTypeReferenceResolver(
- NodesToBuildType nodesToBuildType,
- LinkingUnit linkingUnit,
- ) {
- /// TODO(scheglov) Do we need all these parameters?
- return ReferenceResolver(
- linker,
- nodesToBuildType,
- linker.elementFactory,
- element,
- linkingUnit.reference,
- linkingUnit.node.featureSet.isEnabled(Feature.non_nullable),
- );
- }
-
static void build(Linker linker, LinkInputLibrary inputLibrary) {
var elementFactory = linker.elementFactory;
diff --git a/pkg/analyzer/lib/src/summary2/reference_resolver.dart b/pkg/analyzer/lib/src/summary2/reference_resolver.dart
index ea3f216..9268b91 100644
--- a/pkg/analyzer/lib/src/summary2/reference_resolver.dart
+++ b/pkg/analyzer/lib/src/summary2/reference_resolver.dart
@@ -14,10 +14,8 @@
import 'package:analyzer/src/dart/element/type_system.dart';
import 'package:analyzer/src/summary2/function_type_builder.dart';
import 'package:analyzer/src/summary2/link.dart';
-import 'package:analyzer/src/summary2/linked_element_factory.dart';
import 'package:analyzer/src/summary2/linking_node_scope.dart';
import 'package:analyzer/src/summary2/named_type_builder.dart';
-import 'package:analyzer/src/summary2/reference.dart';
import 'package:analyzer/src/summary2/types_builder.dart';
/// Recursive visitor of [LinkedNode]s that resolves explicit type annotations
@@ -33,8 +31,6 @@
final Linker linker;
final TypeSystemImpl _typeSystem;
final NodesToBuildType nodesToBuildType;
- final LinkedElementFactory elementFactory;
- final Reference unitReference;
/// Indicates whether the library is opted into NNBD.
final bool isNNBD;
@@ -44,12 +40,10 @@
ReferenceResolver(
this.linker,
this.nodesToBuildType,
- this.elementFactory,
LibraryElementImpl libraryElement,
- this.unitReference,
- this.isNNBD,
) : _typeSystem = libraryElement.typeSystem,
- scope = libraryElement.scope;
+ scope = libraryElement.scope,
+ isNNBD = libraryElement.isNonNullableByDefault;
@override
void visitBlockFunctionBody(BlockFunctionBody node) {}
diff --git a/pkg/vm_service/example/vm_service_assert.dart b/pkg/vm_service/example/vm_service_assert.dart
index 8914a67..0af318b 100644
--- a/pkg/vm_service/example/vm_service_assert.dart
+++ b/pkg/vm_service/example/vm_service_assert.dart
@@ -178,6 +178,7 @@
if (obj == "Float64List") return obj;
if (obj == "Float64x2") return obj;
if (obj == "Float64x2List") return obj;
+ if (obj == "FunctionType") return obj;
if (obj == "Int") return obj;
if (obj == "Int16List") return obj;
if (obj == "Int32List") return obj;
@@ -578,6 +579,7 @@
}
assertBool(obj.isStatic!);
assertBool(obj.isConst!);
+ assertBool(obj.implicit!);
return obj;
}
@@ -603,6 +605,8 @@
}
assertBool(obj.isStatic!);
assertBool(obj.isConst!);
+ assertBool(obj.implicit!);
+ assertInstanceRef(obj.signature!);
return obj;
}
@@ -880,6 +884,13 @@
return obj;
}
+vms.Parameter assertParameter(vms.Parameter obj) {
+ assertNotNull(obj);
+ assertInstanceRef(obj.parameterType!);
+ assertBool(obj.fixed!);
+ return obj;
+}
+
vms.PortList assertPortList(vms.PortList obj) {
assertNotNull(obj);
assertListOfInstanceRef(obj.ports!);
@@ -1121,6 +1132,14 @@
return obj;
}
+vms.TypeParameters assertTypeParameters(vms.TypeParameters obj) {
+ assertNotNull(obj);
+ assertListOfString(obj.names!);
+ assertTypeArgumentsRef(obj.bounds!);
+ assertTypeArgumentsRef(obj.defaults!);
+ return obj;
+}
+
vms.UnresolvedSourceLocation assertUnresolvedSourceLocation(
vms.UnresolvedSourceLocation obj) {
assertNotNull(obj);
diff --git a/pkg/vm_service/java/.gitignore b/pkg/vm_service/java/.gitignore
index cdc39af..cc8a3e7 100644
--- a/pkg/vm_service/java/.gitignore
+++ b/pkg/vm_service/java/.gitignore
@@ -99,6 +99,7 @@
src/org/dartlang/vm/service/element/NullRef.java
src/org/dartlang/vm/service/element/Obj.java
src/org/dartlang/vm/service/element/ObjRef.java
+src/org/dartlang/vm/service/element/Parameter.java
src/org/dartlang/vm/service/element/PortList.java
src/org/dartlang/vm/service/element/ProcessMemoryItem.java
src/org/dartlang/vm/service/element/ProcessMemoryUsage.java
@@ -128,6 +129,7 @@
src/org/dartlang/vm/service/element/Timestamp.java
src/org/dartlang/vm/service/element/TypeArguments.java
src/org/dartlang/vm/service/element/TypeArgumentsRef.java
+src/org/dartlang/vm/service/element/TypeParameters.java
src/org/dartlang/vm/service/element/UnresolvedSourceLocation.java
src/org/dartlang/vm/service/element/VM.java
src/org/dartlang/vm/service/element/VMRef.java
diff --git a/pkg/vm_service/lib/src/vm_service.dart b/pkg/vm_service/lib/src/vm_service.dart
index c80ebed..77ce904 100644
--- a/pkg/vm_service/lib/src/vm_service.dart
+++ b/pkg/vm_service/lib/src/vm_service.dart
@@ -157,6 +157,7 @@
'Null': NullVal.parse,
'@Object': ObjRef.parse,
'Object': Obj.parse,
+ 'Parameter': Parameter.parse,
'PortList': PortList.parse,
'ProfileFunction': ProfileFunction.parse,
'ProtocolList': ProtocolList.parse,
@@ -183,6 +184,7 @@
'Timestamp': Timestamp.parse,
'@TypeArguments': TypeArgumentsRef.parse,
'TypeArguments': TypeArguments.parse,
+ 'TypeParameters': TypeParameters.parse,
'UnresolvedSourceLocation': UnresolvedSourceLocation.parse,
'Version': Version.parse,
'@VM': VMRef.parse,
@@ -2585,6 +2587,9 @@
/// An instance of the Dart class TypeRef.
static const String kTypeRef = 'TypeRef';
+ /// An instance of the Dart class FunctionType.
+ static const String kFunctionType = 'FunctionType';
+
/// An instance of the Dart class BoundedType.
static const String kBoundedType = 'BoundedType';
@@ -2930,11 +2935,18 @@
/// The library which contains this class.
LibraryRef? library;
+ /// The type parameters for the class.
+ ///
+ /// Provided if the class is generic.
+ @optional
+ List<InstanceRef>? typeParameters;
+
ClassRef({
required this.name,
required this.library,
required String id,
this.location,
+ this.typeParameters,
}) : super(
id: id,
);
@@ -2945,6 +2957,11 @@
as SourceLocation?;
library = createServiceObject(json['library'], const ['LibraryRef'])
as LibraryRef?;
+ typeParameters = json['typeParameters'] == null
+ ? null
+ : List<InstanceRef>.from(
+ createServiceObject(json['typeParameters'], const ['InstanceRef'])!
+ as List);
}
@override
@@ -2959,6 +2976,8 @@
'library': library?.toJson(),
});
_setIfNotNull(json, 'location', location?.toJson());
+ _setIfNotNull(json, 'typeParameters',
+ typeParameters?.map((f) => f.toJson()).toList());
return json;
}
@@ -2985,6 +3004,12 @@
/// The library which contains this class.
LibraryRef? library;
+ /// The type parameters for the class.
+ ///
+ /// Provided if the class is generic.
+ @optional
+ List<InstanceRef>? typeParameters;
+
/// The error which occurred during class finalization, if it exists.
@optional
ErrorRef? error;
@@ -3041,6 +3066,7 @@
required this.subclasses,
required String id,
this.location,
+ this.typeParameters,
this.error,
this.superClass,
this.superType,
@@ -3055,6 +3081,11 @@
as SourceLocation?;
library = createServiceObject(json['library'], const ['LibraryRef'])
as LibraryRef?;
+ typeParameters = json['typeParameters'] == null
+ ? null
+ : List<InstanceRef>.from(
+ createServiceObject(json['typeParameters'], const ['InstanceRef'])!
+ as List);
error = createServiceObject(json['error'], const ['ErrorRef']) as ErrorRef?;
isAbstract = json['abstract'] ?? false;
isConst = json['const'] ?? false;
@@ -3098,6 +3129,8 @@
'subclasses': subclasses?.map((f) => f.toJson()).toList(),
});
_setIfNotNull(json, 'location', location?.toJson());
+ _setIfNotNull(json, 'typeParameters',
+ typeParameters?.map((f) => f.toJson()).toList());
_setIfNotNull(json, 'error', error?.toJson());
_setIfNotNull(json, 'super', superClass?.toJson());
_setIfNotNull(json, 'superType', superType?.toJson());
@@ -4382,6 +4415,9 @@
/// Is this function const?
bool? isConst;
+ /// Is this function implicitly defined (e.g., implicit getter/setter)?
+ bool? implicit;
+
/// The location of this function in the source code.
@optional
SourceLocation? location;
@@ -4391,6 +4427,7 @@
required this.owner,
required this.isStatic,
required this.isConst,
+ required this.implicit,
required String id,
this.location,
}) : super(
@@ -4403,6 +4440,7 @@
json['owner'], const ['LibraryRef', 'ClassRef', 'FuncRef']) as dynamic;
isStatic = json['static'] ?? false;
isConst = json['const'] ?? false;
+ implicit = json['implicit'] ?? false;
location = createServiceObject(json['location'], const ['SourceLocation'])
as SourceLocation?;
}
@@ -4419,6 +4457,7 @@
'owner': owner?.toJson(),
'static': isStatic,
'const': isConst,
+ 'implicit': implicit,
});
_setIfNotNull(json, 'location', location?.toJson());
return json;
@@ -4430,7 +4469,7 @@
String toString() => '[FuncRef ' //
'id: ${id}, name: ${name}, owner: ${owner}, isStatic: ${isStatic}, ' //
- 'isConst: ${isConst}]';
+ 'isConst: ${isConst}, implicit: ${implicit}]';
}
/// A `Func` represents a Dart language function.
@@ -4452,10 +4491,16 @@
/// Is this function const?
bool? isConst;
+ /// Is this function implicitly defined (e.g., implicit getter/setter)?
+ bool? implicit;
+
/// The location of this function in the source code.
@optional
SourceLocation? location;
+ /// The signature of the function.
+ InstanceRef? signature;
+
/// The compiled code associated with this function.
@optional
CodeRef? code;
@@ -4465,6 +4510,8 @@
required this.owner,
required this.isStatic,
required this.isConst,
+ required this.implicit,
+ required this.signature,
required String id,
this.location,
this.code,
@@ -4478,8 +4525,11 @@
json['owner'], const ['LibraryRef', 'ClassRef', 'FuncRef']) as dynamic;
isStatic = json['static'] ?? false;
isConst = json['const'] ?? false;
+ implicit = json['implicit'] ?? false;
location = createServiceObject(json['location'], const ['SourceLocation'])
as SourceLocation?;
+ signature = createServiceObject(json['signature'], const ['InstanceRef'])
+ as InstanceRef?;
code = createServiceObject(json['code'], const ['CodeRef']) as CodeRef?;
}
@@ -4495,6 +4545,8 @@
'owner': owner?.toJson(),
'static': isStatic,
'const': isConst,
+ 'implicit': implicit,
+ 'signature': signature?.toJson(),
});
_setIfNotNull(json, 'location', location?.toJson());
_setIfNotNull(json, 'code', code?.toJson());
@@ -4507,7 +4559,7 @@
String toString() => '[Func ' //
'id: ${id}, name: ${name}, owner: ${owner}, isStatic: ${isStatic}, ' //
- 'isConst: ${isConst}]';
+ 'isConst: ${isConst}, implicit: ${implicit}, signature: ${signature}]';
}
/// `InstanceRef` is a reference to an `Instance`.
@@ -4586,13 +4638,34 @@
@optional
ClassRef? typeClass;
- /// The parameterized class of a type parameter:
+ /// The parameterized class of a type parameter.
///
/// Provided for instance kinds:
/// - TypeParameter
@optional
ClassRef? parameterizedClass;
+ /// The return type of a function.
+ ///
+ /// Provided for instance kinds:
+ /// - FunctionType
+ @optional
+ InstanceRef? returnType;
+
+ /// The list of parameter types for a function.
+ ///
+ /// Provided for instance kinds:
+ /// - FunctionType
+ @optional
+ List<Parameter>? parameters;
+
+ /// The type parameters for a function.
+ ///
+ /// Provided for instance kinds:
+ /// - FunctionType
+ @optional
+ List<InstanceRef>? typeParameters;
+
/// The pattern of a RegExp instance.
///
/// The pattern is always an instance of kind String.
@@ -4648,6 +4721,9 @@
this.name,
this.typeClass,
this.parameterizedClass,
+ this.returnType,
+ this.parameters,
+ this.typeParameters,
this.pattern,
this.closureFunction,
this.closureContext,
@@ -4672,6 +4748,18 @@
parameterizedClass =
createServiceObject(json['parameterizedClass'], const ['ClassRef'])
as ClassRef?;
+ returnType = createServiceObject(json['returnType'], const ['InstanceRef'])
+ as InstanceRef?;
+ parameters = json['parameters'] == null
+ ? null
+ : List<Parameter>.from(
+ createServiceObject(json['parameters'], const ['Parameter'])!
+ as List);
+ typeParameters = json['typeParameters'] == null
+ ? null
+ : List<InstanceRef>.from(
+ createServiceObject(json['typeParameters'], const ['InstanceRef'])!
+ as List);
pattern = createServiceObject(json['pattern'], const ['InstanceRef'])
as InstanceRef?;
closureFunction =
@@ -4705,6 +4793,11 @@
_setIfNotNull(json, 'name', name);
_setIfNotNull(json, 'typeClass', typeClass?.toJson());
_setIfNotNull(json, 'parameterizedClass', parameterizedClass?.toJson());
+ _setIfNotNull(json, 'returnType', returnType?.toJson());
+ _setIfNotNull(
+ json, 'parameters', parameters?.map((f) => f.toJson()).toList());
+ _setIfNotNull(json, 'typeParameters',
+ typeParameters?.map((f) => f.toJson()).toList());
_setIfNotNull(json, 'pattern', pattern?.toJson());
_setIfNotNull(json, 'closureFunction', closureFunction?.toJson());
_setIfNotNull(json, 'closureContext', closureContext?.toJson());
@@ -4851,6 +4944,27 @@
@optional
ClassRef? parameterizedClass;
+ /// The return type of a function.
+ ///
+ /// Provided for instance kinds:
+ /// - FunctionType
+ @optional
+ InstanceRef? returnType;
+
+ /// The list of parameter types for a function.
+ ///
+ /// Provided for instance kinds:
+ /// - FunctionType
+ @optional
+ List<Parameter>? parameters;
+
+ /// The type parameters for a function.
+ ///
+ /// Provided for instance kinds:
+ /// - FunctionType
+ @optional
+ List<InstanceRef>? typeParameters;
+
/// The fields of this Instance.
@optional
List<BoundField>? fields;
@@ -5018,6 +5132,9 @@
this.name,
this.typeClass,
this.parameterizedClass,
+ this.returnType,
+ this.parameters,
+ this.typeParameters,
this.fields,
this.elements,
this.associations,
@@ -5058,6 +5175,18 @@
parameterizedClass =
createServiceObject(json['parameterizedClass'], const ['ClassRef'])
as ClassRef?;
+ returnType = createServiceObject(json['returnType'], const ['InstanceRef'])
+ as InstanceRef?;
+ parameters = json['parameters'] == null
+ ? null
+ : List<Parameter>.from(
+ createServiceObject(json['parameters'], const ['Parameter'])!
+ as List);
+ typeParameters = json['typeParameters'] == null
+ ? null
+ : List<InstanceRef>.from(
+ createServiceObject(json['typeParameters'], const ['InstanceRef'])!
+ as List);
fields = json['fields'] == null
? null
: List<BoundField>.from(
@@ -5125,6 +5254,11 @@
_setIfNotNull(json, 'name', name);
_setIfNotNull(json, 'typeClass', typeClass?.toJson());
_setIfNotNull(json, 'parameterizedClass', parameterizedClass?.toJson());
+ _setIfNotNull(json, 'returnType', returnType?.toJson());
+ _setIfNotNull(
+ json, 'parameters', parameters?.map((f) => f.toJson()).toList());
+ _setIfNotNull(json, 'typeParameters',
+ typeParameters?.map((f) => f.toJson()).toList());
_setIfNotNull(json, 'fields', fields?.map((f) => f.toJson()).toList());
_setIfNotNull(json, 'elements', elements?.map((f) => f.toJson()).toList());
_setIfNotNull(
@@ -6337,6 +6471,58 @@
String toString() => '[Obj id: ${id}]';
}
+/// A `Parameter` is a representation of a function parameter.
+///
+/// See [Instance].
+class Parameter {
+ static Parameter? parse(Map<String, dynamic>? json) =>
+ json == null ? null : Parameter._fromJson(json);
+
+ /// The type of the parameter.
+ InstanceRef? parameterType;
+
+ /// Represents whether or not this parameter is fixed or optional.
+ bool? fixed;
+
+ /// The name of a named optional parameter.
+ @optional
+ String? name;
+
+ /// Whether or not this named optional parameter is marked as required.
+ @optional
+ bool? required;
+
+ Parameter({
+ required this.parameterType,
+ required this.fixed,
+ this.name,
+ this.required,
+ });
+
+ Parameter._fromJson(Map<String, dynamic> json) {
+ parameterType =
+ createServiceObject(json['parameterType'], const ['InstanceRef'])
+ as InstanceRef?;
+ fixed = json['fixed'] ?? false;
+ name = json['name'];
+ required = json['required'];
+ }
+
+ Map<String, dynamic> toJson() {
+ final json = <String, dynamic>{};
+ json.addAll({
+ 'parameterType': parameterType?.toJson(),
+ 'fixed': fixed,
+ });
+ _setIfNotNull(json, 'name', name);
+ _setIfNotNull(json, 'required', required);
+ return json;
+ }
+
+ String toString() =>
+ '[Parameter parameterType: ${parameterType}, fixed: ${fixed}]';
+}
+
/// A `PortList` contains a list of ports associated with some isolate.
///
/// See [getPort].
@@ -7562,6 +7748,49 @@
'[TypeArguments id: ${id}, name: ${name}, types: ${types}]';
}
+/// A `TypeParameters` object represents the type argument vector for some
+/// uninstantiated generic type.
+class TypeParameters {
+ static TypeParameters? parse(Map<String, dynamic>? json) =>
+ json == null ? null : TypeParameters._fromJson(json);
+
+ /// The names of the type parameters.
+ List<String>? names;
+
+ /// The bounds set on each type parameter.
+ TypeArgumentsRef? bounds;
+
+ /// The default types for each type parameter.
+ TypeArgumentsRef? defaults;
+
+ TypeParameters({
+ required this.names,
+ required this.bounds,
+ required this.defaults,
+ });
+
+ TypeParameters._fromJson(Map<String, dynamic> json) {
+ names = List<String>.from(json['names']);
+ bounds = createServiceObject(json['bounds'], const ['TypeArgumentsRef'])
+ as TypeArgumentsRef?;
+ defaults = createServiceObject(json['defaults'], const ['TypeArgumentsRef'])
+ as TypeArgumentsRef?;
+ }
+
+ Map<String, dynamic> toJson() {
+ final json = <String, dynamic>{};
+ json.addAll({
+ 'names': names?.map((f) => f).toList(),
+ 'bounds': bounds?.toJson(),
+ 'defaults': defaults?.toJson(),
+ });
+ return json;
+ }
+
+ String toString() =>
+ '[TypeParameters names: ${names}, bounds: ${bounds}, defaults: ${defaults}]';
+}
+
/// The `UnresolvedSourceLocation` class is used to refer to an unresolved
/// breakpoint location. As such, it is meant to approximate the final location
/// of the breakpoint but it is not exact.
diff --git a/runtime/observatory/lib/src/service/object.dart b/runtime/observatory/lib/src/service/object.dart
index f3a26e7..7d83c71 100644
--- a/runtime/observatory/lib/src/service/object.dart
+++ b/runtime/observatory/lib/src/service/object.dart
@@ -4774,8 +4774,8 @@
for (var i = 0; i < list.length; i++) {
var v = list[i];
- if ((v is Map) && _isServiceMap(v)) {
- list[i] = owner!.getFromMap(v);
+ if ((v is Map) && owner != null && _isServiceMap(v)) {
+ list[i] = owner.getFromMap(v);
} else if (v is List) {
_upgradeList(v, owner);
} else if (v is Map) {
diff --git a/runtime/observatory/tests/service/get_object_rpc_test.dart b/runtime/observatory/tests/service/get_object_rpc_test.dart
index 9a3eab8..d553138 100644
--- a/runtime/observatory/tests/service/get_object_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_object_rpc_test.dart
@@ -14,15 +14,20 @@
class _DummyClass {
static var dummyVar = 11;
final List<String> dummyList = new List<String>.filled(20, '');
- void dummyFunction() {}
+ void dummyFunction(int a, [bool b = false]) {}
+ void dummyGenericFunction<K, V>(K a, {required V param}) {}
}
class _DummySubClass extends _DummyClass {}
+class _DummyGenericSubClass<T> extends _DummyClass {}
+
void warmup() {
// Silence analyzer.
new _DummySubClass();
- new _DummyClass().dummyFunction();
+ new _DummyGenericSubClass<Object>();
+ new _DummyClass().dummyFunction(0);
+ new _DummyClass().dummyGenericFunction<Object, dynamic>(0, param: 0);
}
@pragma("vm:entry-point")
@@ -43,6 +48,9 @@
@pragma("vm:entry-point")
getDummyClass() => new _DummyClass();
+@pragma("vm:entry-point")
+getDummyGenericSubClass() => new _DummyGenericSubClass<Object>();
+
invoke(Isolate isolate, String selector) async {
Map params = {
'targetId': isolate.rootLibrary.id,
@@ -766,6 +774,7 @@
expect(result['_finalized'], equals(true));
expect(result['_implemented'], equals(false));
expect(result['_patch'], equals(false));
+ expect(result['typeParameters'], isNull);
expect(result['library']['type'], equals('@Library'));
expect(result['location']['type'], equals('SourceLocation'));
expect(result['super']['type'], equals('@Class'));
@@ -778,6 +787,30 @@
expect(result['subclasses'][0]['type'], equals('@Class'));
},
+ // generic class
+ (Isolate isolate) async {
+ // Call eval to get a class id.
+ var evalResult = await invoke(isolate, 'getDummyGenericSubClass');
+ var params = {
+ 'objectId': evalResult['class']['id'],
+ };
+ var result = await isolate.invokeRpcNoUpgrade('getObject', params);
+ expect(result['type'], equals('Class'));
+ expect(result['id'], startsWith('classes/'));
+ expect(result['name'], equals('_DummyGenericSubClass'));
+ expect(result['_vmName'], startsWith('_DummyGenericSubClass@'));
+ expect(result['abstract'], equals(false));
+ expect(result['const'], equals(false));
+ expect(result['_finalized'], equals(true));
+ expect(result['_implemented'], equals(false));
+ expect(result['_patch'], equals(false));
+ expect(result['typeParameters'].length, equals(1));
+ expect(result['library']['type'], equals('@Library'));
+ expect(result['location']['type'], equals('SourceLocation'));
+ expect(result['super']['type'], equals('@Class'));
+ expect(result['interfaces'].length, isZero);
+ },
+
// invalid class.
(Isolate isolate) async {
var params = {
@@ -851,6 +884,52 @@
expect(result['_kind'], equals('RegularFunction'));
expect(result['static'], equals(false));
expect(result['const'], equals(false));
+ expect(result['implicit'], equals(false));
+ expect(result['signature']['typeParameters'], isNull);
+ expect(result['signature']['returnType'], isNotNull);
+ expect(result['signature']['parameters'].length, 3);
+ expect(result['signature']['parameters'][1]['parameterType']['name'],
+ equals('int'));
+ expect(result['signature']['parameters'][1]['fixed'], isTrue);
+ expect(result['signature']['parameters'][2]['parameterType']['name'],
+ equals('bool'));
+ expect(result['signature']['parameters'][2]['fixed'], isFalse);
+ expect(result['location']['type'], equals('SourceLocation'));
+ expect(result['code']['type'], equals('@Code'));
+ expect(result['_optimizable'], equals(true));
+ expect(result['_inlinable'], equals(true));
+ expect(result['_usageCounter'], isPositive);
+ expect(result['_optimizedCallSiteCount'], isZero);
+ expect(result['_deoptimizations'], isZero);
+ },
+
+ // generic function.
+ (Isolate isolate) async {
+ // Call eval to get a class id.
+ var evalResult = await invoke(isolate, 'getDummyClass');
+ var id = "${evalResult['class']['id']}/functions/dummyGenericFunction";
+ var params = {
+ 'objectId': id,
+ };
+ var result = await isolate.invokeRpcNoUpgrade('getObject', params);
+ expect(result['type'], equals('Function'));
+ expect(result['id'], equals(id));
+ expect(result['name'], equals('dummyGenericFunction'));
+ expect(result['_kind'], equals('RegularFunction'));
+ expect(result['static'], equals(false));
+ expect(result['const'], equals(false));
+ expect(result['implicit'], equals(false));
+ expect(result['signature']['typeParameters'].length, 2);
+ expect(result['signature']['returnType'], isNotNull);
+ expect(result['signature']['parameters'].length, 3);
+ expect(result['signature']['parameters'][1]['parameterType']['name'],
+ isNotNull);
+ expect(result['signature']['parameters'][1]['fixed'], isTrue);
+ expect(result['signature']['parameters'][2]['parameterType']['name'],
+ isNotNull);
+ expect(result['signature']['parameters'][2]['name'], 'param');
+ expect(result['signature']['parameters'][2]['fixed'], isFalse);
+ expect(result['signature']['parameters'][2]['required'], isTrue);
expect(result['location']['type'], equals('SourceLocation'));
expect(result['code']['type'], equals('@Code'));
expect(result['_optimizable'], equals(true));
diff --git a/runtime/observatory/tests/service/get_version_rpc_test.dart b/runtime/observatory/tests/service/get_version_rpc_test.dart
index f153eac..6bec5f1 100644
--- a/runtime/observatory/tests/service/get_version_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_version_rpc_test.dart
@@ -12,7 +12,7 @@
final result = await vm.invokeRpcNoUpgrade('getVersion', {});
expect(result['type'], 'Version');
expect(result['major'], 3);
- expect(result['minor'], 49);
+ expect(result['minor'], 50);
expect(result['_privateMajor'], 0);
expect(result['_privateMinor'], 0);
},
diff --git a/runtime/observatory_2/lib/src/service/object.dart b/runtime/observatory_2/lib/src/service/object.dart
index 2baf6d5..14d72c2 100644
--- a/runtime/observatory_2/lib/src/service/object.dart
+++ b/runtime/observatory_2/lib/src/service/object.dart
@@ -4784,7 +4784,7 @@
for (var i = 0; i < list.length; i++) {
var v = list[i];
- if ((v is Map) && _isServiceMap(v)) {
+ if ((v is Map) && owner != null && _isServiceMap(v)) {
list[i] = owner.getFromMap(v);
} else if (v is List) {
_upgradeList(v, owner);
diff --git a/runtime/observatory_2/tests/service_2/get_object_rpc_test.dart b/runtime/observatory_2/tests/service_2/get_object_rpc_test.dart
index 36b9c61..44912b3 100644
--- a/runtime/observatory_2/tests/service_2/get_object_rpc_test.dart
+++ b/runtime/observatory_2/tests/service_2/get_object_rpc_test.dart
@@ -14,15 +14,20 @@
class _DummyClass {
static var dummyVar = 11;
final List<String> dummyList = new List<String>.filled(20, null);
- void dummyFunction() {}
+ void dummyFunction(int a, [bool b = false]) {}
+ void dummyGenericFunction<K, V>(K a, {V param}) {}
}
class _DummySubClass extends _DummyClass {}
+class _DummyGenericSubClass<T> extends _DummyClass {}
+
void warmup() {
// Silence analyzer.
new _DummySubClass();
- new _DummyClass().dummyFunction();
+ new _DummyGenericSubClass<Object>();
+ new _DummyClass().dummyFunction(0);
+ new _DummyClass().dummyGenericFunction<Object, dynamic>(0, param: 0);
}
@pragma("vm:entry-point")
@@ -43,6 +48,9 @@
@pragma("vm:entry-point")
getDummyClass() => new _DummyClass();
+@pragma("vm:entry-point")
+getDummyGenericSubClass() => new _DummyGenericSubClass<Object>();
+
invoke(Isolate isolate, String selector) async {
Map params = {
'targetId': isolate.rootLibrary.id,
@@ -778,6 +786,30 @@
expect(result['subclasses'][0]['type'], equals('@Class'));
},
+ // generic class
+ (Isolate isolate) async {
+ // Call eval to get a class id.
+ var evalResult = await invoke(isolate, 'getDummyGenericSubClass');
+ var params = {
+ 'objectId': evalResult['class']['id'],
+ };
+ var result = await isolate.invokeRpcNoUpgrade('getObject', params);
+ expect(result['type'], equals('Class'));
+ expect(result['id'], startsWith('classes/'));
+ expect(result['name'], equals('_DummyGenericSubClass'));
+ expect(result['_vmName'], startsWith('_DummyGenericSubClass@'));
+ expect(result['abstract'], equals(false));
+ expect(result['const'], equals(false));
+ expect(result['_finalized'], equals(true));
+ expect(result['_implemented'], equals(false));
+ expect(result['_patch'], equals(false));
+ expect(result['typeParameters'].length, equals(1));
+ expect(result['library']['type'], equals('@Library'));
+ expect(result['location']['type'], equals('SourceLocation'));
+ expect(result['super']['type'], equals('@Class'));
+ expect(result['interfaces'].length, isZero);
+ },
+
// invalid class.
(Isolate isolate) async {
var params = {
@@ -851,6 +883,52 @@
expect(result['_kind'], equals('RegularFunction'));
expect(result['static'], equals(false));
expect(result['const'], equals(false));
+ expect(result['implicit'], equals(false));
+ expect(result['signature']['typeParameters'], isNull);
+ expect(result['signature']['returnType'], isNotNull);
+ expect(result['signature']['parameters'].length, 3);
+ expect(result['signature']['parameters'][1]['parameterType']['name'],
+ equals('int'));
+ expect(result['signature']['parameters'][1]['fixed'], isTrue);
+ expect(result['signature']['parameters'][2]['parameterType']['name'],
+ equals('bool'));
+ expect(result['signature']['parameters'][2]['fixed'], isFalse);
+ expect(result['location']['type'], equals('SourceLocation'));
+ expect(result['code']['type'], equals('@Code'));
+ expect(result['_optimizable'], equals(true));
+ expect(result['_inlinable'], equals(true));
+ expect(result['_usageCounter'], isPositive);
+ expect(result['_optimizedCallSiteCount'], isZero);
+ expect(result['_deoptimizations'], isZero);
+ },
+
+ // generic function.
+ (Isolate isolate) async {
+ // Call eval to get a class id.
+ var evalResult = await invoke(isolate, 'getDummyClass');
+ var id = "${evalResult['class']['id']}/functions/dummyGenericFunction";
+ var params = {
+ 'objectId': id,
+ };
+ var result = await isolate.invokeRpcNoUpgrade('getObject', params);
+ expect(result['type'], equals('Function'));
+ expect(result['id'], equals(id));
+ expect(result['name'], equals('dummyGenericFunction'));
+ expect(result['_kind'], equals('RegularFunction'));
+ expect(result['static'], equals(false));
+ expect(result['const'], equals(false));
+ expect(result['implicit'], equals(false));
+ expect(result['signature']['typeParameters'].length, 2);
+ expect(result['signature']['returnType'], isNotNull);
+ expect(result['signature']['parameters'].length, 3);
+ expect(result['signature']['parameters'][1]['parameterType']['name'],
+ isNotNull);
+ expect(result['signature']['parameters'][1]['fixed'], isTrue);
+ expect(result['signature']['parameters'][2]['parameterType']['name'],
+ isNotNull);
+ expect(result['signature']['parameters'][2]['name'], 'param');
+ expect(result['signature']['parameters'][2]['fixed'], isFalse);
+ expect(result['signature']['parameters'][2]['required'], isFalse);
expect(result['location']['type'], equals('SourceLocation'));
expect(result['code']['type'], equals('@Code'));
expect(result['_optimizable'], equals(true));
diff --git a/runtime/observatory_2/tests/service_2/get_version_rpc_test.dart b/runtime/observatory_2/tests/service_2/get_version_rpc_test.dart
index a36deeb..31490bf 100644
--- a/runtime/observatory_2/tests/service_2/get_version_rpc_test.dart
+++ b/runtime/observatory_2/tests/service_2/get_version_rpc_test.dart
@@ -12,7 +12,7 @@
final result = await vm.invokeRpcNoUpgrade('getVersion', {});
expect(result['type'], equals('Version'));
expect(result['major'], equals(3));
- expect(result['minor'], equals(49));
+ expect(result['minor'], equals(50));
expect(result['_privateMajor'], equals(0));
expect(result['_privateMinor'], equals(0));
},
diff --git a/runtime/tests/concurrency/stress_test_list.json b/runtime/tests/concurrency/stress_test_list.json
index 39ecc00..7981ebb 100644
--- a/runtime/tests/concurrency/stress_test_list.json
+++ b/runtime/tests/concurrency/stress_test_list.json
@@ -3061,7 +3061,6 @@
"../../../tests/lib/async/stream_error_test.dart",
"../../../tests/lib/async/stream_event_transformed_test.dart",
"../../../tests/lib/async/stream_from_futures_test.dart",
- "../../../tests/lib/async/stream_from_iterable_test.dart",
"../../../tests/lib/async/stream_iterator_double_cancel_test.dart",
"../../../tests/lib/async/stream_iterator_test.dart",
"../../../tests/lib/async/stream_join_test.dart",
@@ -3273,7 +3272,6 @@
"../../../tests/standalone/io/file_system_uri_test.dart",
"../../../tests/standalone/io/file_typed_data_test.dart",
"../../../tests/standalone/io/file_windows_test.dart",
- "../../../tests/standalone/io/file_write_as_test.dart",
"../../../tests/standalone/io/file_write_only_test.dart",
"../../../tests/standalone/io/gzip_format_exception_test.dart",
"../../../tests/standalone/io/http_100_continue_test.dart",
@@ -6406,7 +6404,6 @@
"../../../tests/lib_2/async/stream_error_test.dart",
"../../../tests/lib_2/async/stream_event_transformed_test.dart",
"../../../tests/lib_2/async/stream_from_futures_test.dart",
- "../../../tests/lib_2/async/stream_from_iterable_test.dart",
"../../../tests/lib_2/async/stream_iterator_double_cancel_test.dart",
"../../../tests/lib_2/async/stream_iterator_test.dart",
"../../../tests/lib_2/async/stream_join_test.dart",
@@ -6606,7 +6603,6 @@
"../../../tests/standalone_2/io/file_system_uri_test.dart",
"../../../tests/standalone_2/io/file_typed_data_test.dart",
"../../../tests/standalone_2/io/file_windows_test.dart",
- "../../../tests/standalone_2/io/file_write_as_test.dart",
"../../../tests/standalone_2/io/file_write_only_test.dart",
"../../../tests/standalone_2/io/gzip_format_exception_test.dart",
"../../../tests/standalone_2/io/http_100_continue_test.dart",
diff --git a/runtime/vm/compiler/runtime_offsets_extracted.h b/runtime/vm/compiler/runtime_offsets_extracted.h
index 075622e..e1f330e 100644
--- a/runtime/vm/compiler/runtime_offsets_extracted.h
+++ b/runtime/vm/compiler/runtime_offsets_extracted.h
@@ -2596,27 +2596,27 @@
static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
16;
static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
-static constexpr dart::compiler::target::word Type_arguments_offset = 24;
-static constexpr dart::compiler::target::word Type_hash_offset = 28;
-static constexpr dart::compiler::target::word Type_type_class_id_offset = 20;
-static constexpr dart::compiler::target::word Type_type_state_offset = 32;
-static constexpr dart::compiler::target::word Type_nullability_offset = 33;
-static constexpr dart::compiler::target::word FunctionType_hash_offset = 36;
+static constexpr dart::compiler::target::word Type_arguments_offset = 28;
+static constexpr dart::compiler::target::word Type_hash_offset = 32;
+static constexpr dart::compiler::target::word Type_type_class_id_offset = 24;
+static constexpr dart::compiler::target::word Type_type_state_offset = 36;
+static constexpr dart::compiler::target::word Type_nullability_offset = 37;
+static constexpr dart::compiler::target::word FunctionType_hash_offset = 40;
static constexpr dart::compiler::target::word
- FunctionType_packed_parameter_counts_offset = 40;
+ FunctionType_packed_parameter_counts_offset = 44;
static constexpr dart::compiler::target::word
- FunctionType_packed_type_parameter_counts_offset = 44;
+ FunctionType_packed_type_parameter_counts_offset = 48;
static constexpr dart::compiler::target::word
- FunctionType_parameter_types_offset = 28;
+ FunctionType_parameter_types_offset = 32;
static constexpr dart::compiler::target::word
- FunctionType_named_parameter_names_offset = 32;
+ FunctionType_named_parameter_names_offset = 36;
static constexpr dart::compiler::target::word
- FunctionType_type_parameters_offset = 20;
+ FunctionType_type_parameters_offset = 24;
static constexpr dart::compiler::target::word
- TypeParameter_parameterized_class_id_offset = 28;
-static constexpr dart::compiler::target::word TypeParameter_index_offset = 31;
+ TypeParameter_parameterized_class_id_offset = 32;
+static constexpr dart::compiler::target::word TypeParameter_index_offset = 35;
static constexpr dart::compiler::target::word TypeParameter_nullability_offset =
- 33;
+ 37;
static constexpr dart::compiler::target::word
TypeArguments_instantiations_offset = 8;
static constexpr dart::compiler::target::word TypeArguments_length_offset = 12;
@@ -2628,13 +2628,13 @@
static constexpr dart::compiler::target::word TypeParameters_bounds_offset = 16;
static constexpr dart::compiler::target::word TypeParameters_defaults_offset =
20;
-static constexpr dart::compiler::target::word TypeParameter_bound_offset = 24;
-static constexpr dart::compiler::target::word TypeParameter_flags_offset = 32;
-static constexpr dart::compiler::target::word TypeRef_type_offset = 20;
-static constexpr dart::compiler::target::word TypedDataBase_length_offset = 16;
-static constexpr dart::compiler::target::word TypedDataView_data_offset = 20;
+static constexpr dart::compiler::target::word TypeParameter_bound_offset = 28;
+static constexpr dart::compiler::target::word TypeParameter_flags_offset = 36;
+static constexpr dart::compiler::target::word TypeRef_type_offset = 24;
+static constexpr dart::compiler::target::word TypedDataBase_length_offset = 20;
+static constexpr dart::compiler::target::word TypedDataView_data_offset = 24;
static constexpr dart::compiler::target::word
- TypedDataView_offset_in_bytes_offset = 24;
+ TypedDataView_offset_in_bytes_offset = 28;
static constexpr dart::compiler::target::word TypedData_data_offset = 24;
static constexpr dart::compiler::target::word
UnhandledException_exception_offset = 8;
@@ -2681,7 +2681,7 @@
static constexpr dart::compiler::target::word Float32x4_InstanceSize = 24;
static constexpr dart::compiler::target::word Float64x2_InstanceSize = 24;
static constexpr dart::compiler::target::word Function_InstanceSize = 96;
-static constexpr dart::compiler::target::word FunctionType_InstanceSize = 48;
+static constexpr dart::compiler::target::word FunctionType_InstanceSize = 56;
static constexpr dart::compiler::target::word FutureOr_InstanceSize = 16;
static constexpr dart::compiler::target::word GrowableObjectArray_InstanceSize =
24;
@@ -2729,7 +2729,7 @@
static constexpr dart::compiler::target::word Type_InstanceSize = 40;
static constexpr dart::compiler::target::word TypeParameter_InstanceSize = 40;
static constexpr dart::compiler::target::word TypeParameters_InstanceSize = 24;
-static constexpr dart::compiler::target::word TypeRef_InstanceSize = 24;
+static constexpr dart::compiler::target::word TypeRef_InstanceSize = 32;
static constexpr dart::compiler::target::word TypedData_HeaderSize = 24;
static constexpr dart::compiler::target::word TypedDataBase_InstanceSize = 24;
static constexpr dart::compiler::target::word TypedDataView_InstanceSize = 32;
@@ -3144,27 +3144,27 @@
static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
16;
static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
-static constexpr dart::compiler::target::word Type_arguments_offset = 24;
-static constexpr dart::compiler::target::word Type_hash_offset = 28;
-static constexpr dart::compiler::target::word Type_type_class_id_offset = 20;
-static constexpr dart::compiler::target::word Type_type_state_offset = 32;
-static constexpr dart::compiler::target::word Type_nullability_offset = 33;
-static constexpr dart::compiler::target::word FunctionType_hash_offset = 36;
+static constexpr dart::compiler::target::word Type_arguments_offset = 28;
+static constexpr dart::compiler::target::word Type_hash_offset = 32;
+static constexpr dart::compiler::target::word Type_type_class_id_offset = 24;
+static constexpr dart::compiler::target::word Type_type_state_offset = 36;
+static constexpr dart::compiler::target::word Type_nullability_offset = 37;
+static constexpr dart::compiler::target::word FunctionType_hash_offset = 40;
static constexpr dart::compiler::target::word
- FunctionType_packed_parameter_counts_offset = 40;
+ FunctionType_packed_parameter_counts_offset = 44;
static constexpr dart::compiler::target::word
- FunctionType_packed_type_parameter_counts_offset = 44;
+ FunctionType_packed_type_parameter_counts_offset = 48;
static constexpr dart::compiler::target::word
- FunctionType_parameter_types_offset = 28;
+ FunctionType_parameter_types_offset = 32;
static constexpr dart::compiler::target::word
- FunctionType_named_parameter_names_offset = 32;
+ FunctionType_named_parameter_names_offset = 36;
static constexpr dart::compiler::target::word
- FunctionType_type_parameters_offset = 20;
+ FunctionType_type_parameters_offset = 24;
static constexpr dart::compiler::target::word
- TypeParameter_parameterized_class_id_offset = 28;
-static constexpr dart::compiler::target::word TypeParameter_index_offset = 31;
+ TypeParameter_parameterized_class_id_offset = 32;
+static constexpr dart::compiler::target::word TypeParameter_index_offset = 35;
static constexpr dart::compiler::target::word TypeParameter_nullability_offset =
- 33;
+ 37;
static constexpr dart::compiler::target::word
TypeArguments_instantiations_offset = 8;
static constexpr dart::compiler::target::word TypeArguments_length_offset = 12;
@@ -3176,13 +3176,13 @@
static constexpr dart::compiler::target::word TypeParameters_bounds_offset = 16;
static constexpr dart::compiler::target::word TypeParameters_defaults_offset =
20;
-static constexpr dart::compiler::target::word TypeParameter_bound_offset = 24;
-static constexpr dart::compiler::target::word TypeParameter_flags_offset = 32;
-static constexpr dart::compiler::target::word TypeRef_type_offset = 20;
-static constexpr dart::compiler::target::word TypedDataBase_length_offset = 16;
-static constexpr dart::compiler::target::word TypedDataView_data_offset = 20;
+static constexpr dart::compiler::target::word TypeParameter_bound_offset = 28;
+static constexpr dart::compiler::target::word TypeParameter_flags_offset = 36;
+static constexpr dart::compiler::target::word TypeRef_type_offset = 24;
+static constexpr dart::compiler::target::word TypedDataBase_length_offset = 20;
+static constexpr dart::compiler::target::word TypedDataView_data_offset = 24;
static constexpr dart::compiler::target::word
- TypedDataView_offset_in_bytes_offset = 24;
+ TypedDataView_offset_in_bytes_offset = 28;
static constexpr dart::compiler::target::word TypedData_data_offset = 24;
static constexpr dart::compiler::target::word
UnhandledException_exception_offset = 8;
@@ -3230,7 +3230,7 @@
static constexpr dart::compiler::target::word Float32x4_InstanceSize = 24;
static constexpr dart::compiler::target::word Float64x2_InstanceSize = 24;
static constexpr dart::compiler::target::word Function_InstanceSize = 96;
-static constexpr dart::compiler::target::word FunctionType_InstanceSize = 48;
+static constexpr dart::compiler::target::word FunctionType_InstanceSize = 56;
static constexpr dart::compiler::target::word FutureOr_InstanceSize = 16;
static constexpr dart::compiler::target::word GrowableObjectArray_InstanceSize =
24;
@@ -3278,7 +3278,7 @@
static constexpr dart::compiler::target::word Type_InstanceSize = 40;
static constexpr dart::compiler::target::word TypeParameter_InstanceSize = 40;
static constexpr dart::compiler::target::word TypeParameters_InstanceSize = 24;
-static constexpr dart::compiler::target::word TypeRef_InstanceSize = 24;
+static constexpr dart::compiler::target::word TypeRef_InstanceSize = 32;
static constexpr dart::compiler::target::word TypedData_HeaderSize = 24;
static constexpr dart::compiler::target::word TypedDataBase_InstanceSize = 24;
static constexpr dart::compiler::target::word TypedDataView_InstanceSize = 32;
@@ -5843,27 +5843,27 @@
static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
16;
static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
-static constexpr dart::compiler::target::word Type_arguments_offset = 24;
-static constexpr dart::compiler::target::word Type_hash_offset = 28;
-static constexpr dart::compiler::target::word Type_type_class_id_offset = 20;
-static constexpr dart::compiler::target::word Type_type_state_offset = 32;
-static constexpr dart::compiler::target::word Type_nullability_offset = 33;
-static constexpr dart::compiler::target::word FunctionType_hash_offset = 36;
+static constexpr dart::compiler::target::word Type_arguments_offset = 28;
+static constexpr dart::compiler::target::word Type_hash_offset = 32;
+static constexpr dart::compiler::target::word Type_type_class_id_offset = 24;
+static constexpr dart::compiler::target::word Type_type_state_offset = 36;
+static constexpr dart::compiler::target::word Type_nullability_offset = 37;
+static constexpr dart::compiler::target::word FunctionType_hash_offset = 40;
static constexpr dart::compiler::target::word
- FunctionType_packed_parameter_counts_offset = 40;
+ FunctionType_packed_parameter_counts_offset = 44;
static constexpr dart::compiler::target::word
- FunctionType_packed_type_parameter_counts_offset = 44;
+ FunctionType_packed_type_parameter_counts_offset = 48;
static constexpr dart::compiler::target::word
- FunctionType_parameter_types_offset = 28;
+ FunctionType_parameter_types_offset = 32;
static constexpr dart::compiler::target::word
- FunctionType_named_parameter_names_offset = 32;
+ FunctionType_named_parameter_names_offset = 36;
static constexpr dart::compiler::target::word
- FunctionType_type_parameters_offset = 20;
+ FunctionType_type_parameters_offset = 24;
static constexpr dart::compiler::target::word
- TypeParameter_parameterized_class_id_offset = 28;
-static constexpr dart::compiler::target::word TypeParameter_index_offset = 31;
+ TypeParameter_parameterized_class_id_offset = 32;
+static constexpr dart::compiler::target::word TypeParameter_index_offset = 35;
static constexpr dart::compiler::target::word TypeParameter_nullability_offset =
- 33;
+ 37;
static constexpr dart::compiler::target::word
TypeArguments_instantiations_offset = 8;
static constexpr dart::compiler::target::word TypeArguments_length_offset = 12;
@@ -5875,13 +5875,13 @@
static constexpr dart::compiler::target::word TypeParameters_bounds_offset = 16;
static constexpr dart::compiler::target::word TypeParameters_defaults_offset =
20;
-static constexpr dart::compiler::target::word TypeParameter_bound_offset = 24;
-static constexpr dart::compiler::target::word TypeParameter_flags_offset = 32;
-static constexpr dart::compiler::target::word TypeRef_type_offset = 20;
-static constexpr dart::compiler::target::word TypedDataBase_length_offset = 16;
-static constexpr dart::compiler::target::word TypedDataView_data_offset = 20;
+static constexpr dart::compiler::target::word TypeParameter_bound_offset = 28;
+static constexpr dart::compiler::target::word TypeParameter_flags_offset = 36;
+static constexpr dart::compiler::target::word TypeRef_type_offset = 24;
+static constexpr dart::compiler::target::word TypedDataBase_length_offset = 20;
+static constexpr dart::compiler::target::word TypedDataView_data_offset = 24;
static constexpr dart::compiler::target::word
- TypedDataView_offset_in_bytes_offset = 24;
+ TypedDataView_offset_in_bytes_offset = 28;
static constexpr dart::compiler::target::word TypedData_data_offset = 24;
static constexpr dart::compiler::target::word
UnhandledException_exception_offset = 8;
@@ -5928,7 +5928,7 @@
static constexpr dart::compiler::target::word Float32x4_InstanceSize = 24;
static constexpr dart::compiler::target::word Float64x2_InstanceSize = 24;
static constexpr dart::compiler::target::word Function_InstanceSize = 96;
-static constexpr dart::compiler::target::word FunctionType_InstanceSize = 48;
+static constexpr dart::compiler::target::word FunctionType_InstanceSize = 56;
static constexpr dart::compiler::target::word FutureOr_InstanceSize = 16;
static constexpr dart::compiler::target::word GrowableObjectArray_InstanceSize =
24;
@@ -5976,7 +5976,7 @@
static constexpr dart::compiler::target::word Type_InstanceSize = 40;
static constexpr dart::compiler::target::word TypeParameter_InstanceSize = 40;
static constexpr dart::compiler::target::word TypeParameters_InstanceSize = 24;
-static constexpr dart::compiler::target::word TypeRef_InstanceSize = 24;
+static constexpr dart::compiler::target::word TypeRef_InstanceSize = 32;
static constexpr dart::compiler::target::word TypedData_HeaderSize = 24;
static constexpr dart::compiler::target::word TypedDataBase_InstanceSize = 24;
static constexpr dart::compiler::target::word TypedDataView_InstanceSize = 32;
@@ -6385,27 +6385,27 @@
static constexpr dart::compiler::target::word TimelineStream_enabled_offset =
16;
static constexpr dart::compiler::target::word TwoByteString_data_offset = 16;
-static constexpr dart::compiler::target::word Type_arguments_offset = 24;
-static constexpr dart::compiler::target::word Type_hash_offset = 28;
-static constexpr dart::compiler::target::word Type_type_class_id_offset = 20;
-static constexpr dart::compiler::target::word Type_type_state_offset = 32;
-static constexpr dart::compiler::target::word Type_nullability_offset = 33;
-static constexpr dart::compiler::target::word FunctionType_hash_offset = 36;
+static constexpr dart::compiler::target::word Type_arguments_offset = 28;
+static constexpr dart::compiler::target::word Type_hash_offset = 32;
+static constexpr dart::compiler::target::word Type_type_class_id_offset = 24;
+static constexpr dart::compiler::target::word Type_type_state_offset = 36;
+static constexpr dart::compiler::target::word Type_nullability_offset = 37;
+static constexpr dart::compiler::target::word FunctionType_hash_offset = 40;
static constexpr dart::compiler::target::word
- FunctionType_packed_parameter_counts_offset = 40;
+ FunctionType_packed_parameter_counts_offset = 44;
static constexpr dart::compiler::target::word
- FunctionType_packed_type_parameter_counts_offset = 44;
+ FunctionType_packed_type_parameter_counts_offset = 48;
static constexpr dart::compiler::target::word
- FunctionType_parameter_types_offset = 28;
+ FunctionType_parameter_types_offset = 32;
static constexpr dart::compiler::target::word
- FunctionType_named_parameter_names_offset = 32;
+ FunctionType_named_parameter_names_offset = 36;
static constexpr dart::compiler::target::word
- FunctionType_type_parameters_offset = 20;
+ FunctionType_type_parameters_offset = 24;
static constexpr dart::compiler::target::word
- TypeParameter_parameterized_class_id_offset = 28;
-static constexpr dart::compiler::target::word TypeParameter_index_offset = 31;
+ TypeParameter_parameterized_class_id_offset = 32;
+static constexpr dart::compiler::target::word TypeParameter_index_offset = 35;
static constexpr dart::compiler::target::word TypeParameter_nullability_offset =
- 33;
+ 37;
static constexpr dart::compiler::target::word
TypeArguments_instantiations_offset = 8;
static constexpr dart::compiler::target::word TypeArguments_length_offset = 12;
@@ -6417,13 +6417,13 @@
static constexpr dart::compiler::target::word TypeParameters_bounds_offset = 16;
static constexpr dart::compiler::target::word TypeParameters_defaults_offset =
20;
-static constexpr dart::compiler::target::word TypeParameter_bound_offset = 24;
-static constexpr dart::compiler::target::word TypeParameter_flags_offset = 32;
-static constexpr dart::compiler::target::word TypeRef_type_offset = 20;
-static constexpr dart::compiler::target::word TypedDataBase_length_offset = 16;
-static constexpr dart::compiler::target::word TypedDataView_data_offset = 20;
+static constexpr dart::compiler::target::word TypeParameter_bound_offset = 28;
+static constexpr dart::compiler::target::word TypeParameter_flags_offset = 36;
+static constexpr dart::compiler::target::word TypeRef_type_offset = 24;
+static constexpr dart::compiler::target::word TypedDataBase_length_offset = 20;
+static constexpr dart::compiler::target::word TypedDataView_data_offset = 24;
static constexpr dart::compiler::target::word
- TypedDataView_offset_in_bytes_offset = 24;
+ TypedDataView_offset_in_bytes_offset = 28;
static constexpr dart::compiler::target::word TypedData_data_offset = 24;
static constexpr dart::compiler::target::word
UnhandledException_exception_offset = 8;
@@ -6471,7 +6471,7 @@
static constexpr dart::compiler::target::word Float32x4_InstanceSize = 24;
static constexpr dart::compiler::target::word Float64x2_InstanceSize = 24;
static constexpr dart::compiler::target::word Function_InstanceSize = 96;
-static constexpr dart::compiler::target::word FunctionType_InstanceSize = 48;
+static constexpr dart::compiler::target::word FunctionType_InstanceSize = 56;
static constexpr dart::compiler::target::word FutureOr_InstanceSize = 16;
static constexpr dart::compiler::target::word GrowableObjectArray_InstanceSize =
24;
@@ -6519,7 +6519,7 @@
static constexpr dart::compiler::target::word Type_InstanceSize = 40;
static constexpr dart::compiler::target::word TypeParameter_InstanceSize = 40;
static constexpr dart::compiler::target::word TypeParameters_InstanceSize = 24;
-static constexpr dart::compiler::target::word TypeRef_InstanceSize = 24;
+static constexpr dart::compiler::target::word TypeRef_InstanceSize = 32;
static constexpr dart::compiler::target::word TypedData_HeaderSize = 24;
static constexpr dart::compiler::target::word TypedDataBase_InstanceSize = 24;
static constexpr dart::compiler::target::word TypedDataView_InstanceSize = 32;
@@ -8803,29 +8803,29 @@
AOT_TimelineStream_enabled_offset = 16;
static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
16;
-static constexpr dart::compiler::target::word AOT_Type_arguments_offset = 24;
-static constexpr dart::compiler::target::word AOT_Type_hash_offset = 28;
+static constexpr dart::compiler::target::word AOT_Type_arguments_offset = 28;
+static constexpr dart::compiler::target::word AOT_Type_hash_offset = 32;
static constexpr dart::compiler::target::word AOT_Type_type_class_id_offset =
- 20;
-static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 32;
-static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 33;
-static constexpr dart::compiler::target::word AOT_FunctionType_hash_offset = 36;
+ 24;
+static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 36;
+static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 37;
+static constexpr dart::compiler::target::word AOT_FunctionType_hash_offset = 40;
static constexpr dart::compiler::target::word
- AOT_FunctionType_packed_parameter_counts_offset = 40;
+ AOT_FunctionType_packed_parameter_counts_offset = 44;
static constexpr dart::compiler::target::word
- AOT_FunctionType_packed_type_parameter_counts_offset = 44;
+ AOT_FunctionType_packed_type_parameter_counts_offset = 48;
static constexpr dart::compiler::target::word
- AOT_FunctionType_parameter_types_offset = 28;
+ AOT_FunctionType_parameter_types_offset = 32;
static constexpr dart::compiler::target::word
- AOT_FunctionType_named_parameter_names_offset = 32;
+ AOT_FunctionType_named_parameter_names_offset = 36;
static constexpr dart::compiler::target::word
- AOT_FunctionType_type_parameters_offset = 20;
+ AOT_FunctionType_type_parameters_offset = 24;
static constexpr dart::compiler::target::word
- AOT_TypeParameter_parameterized_class_id_offset = 28;
+ AOT_TypeParameter_parameterized_class_id_offset = 32;
static constexpr dart::compiler::target::word AOT_TypeParameter_index_offset =
- 31;
+ 35;
static constexpr dart::compiler::target::word
- AOT_TypeParameter_nullability_offset = 33;
+ AOT_TypeParameter_nullability_offset = 37;
static constexpr dart::compiler::target::word
AOT_TypeArguments_instantiations_offset = 8;
static constexpr dart::compiler::target::word AOT_TypeArguments_length_offset =
@@ -8843,16 +8843,16 @@
static constexpr dart::compiler::target::word
AOT_TypeParameters_defaults_offset = 20;
static constexpr dart::compiler::target::word AOT_TypeParameter_bound_offset =
- 24;
+ 28;
static constexpr dart::compiler::target::word AOT_TypeParameter_flags_offset =
- 32;
-static constexpr dart::compiler::target::word AOT_TypeRef_type_offset = 20;
+ 36;
+static constexpr dart::compiler::target::word AOT_TypeRef_type_offset = 24;
static constexpr dart::compiler::target::word AOT_TypedDataBase_length_offset =
- 16;
-static constexpr dart::compiler::target::word AOT_TypedDataView_data_offset =
20;
+static constexpr dart::compiler::target::word AOT_TypedDataView_data_offset =
+ 24;
static constexpr dart::compiler::target::word
- AOT_TypedDataView_offset_in_bytes_offset = 24;
+ AOT_TypedDataView_offset_in_bytes_offset = 28;
static constexpr dart::compiler::target::word AOT_TypedData_data_offset = 24;
static constexpr dart::compiler::target::word
AOT_UnhandledException_exception_offset = 8;
@@ -8903,7 +8903,7 @@
static constexpr dart::compiler::target::word AOT_Float64x2_InstanceSize = 24;
static constexpr dart::compiler::target::word AOT_Function_InstanceSize = 56;
static constexpr dart::compiler::target::word AOT_FunctionType_InstanceSize =
- 48;
+ 56;
static constexpr dart::compiler::target::word AOT_FutureOr_InstanceSize = 16;
static constexpr dart::compiler::target::word
AOT_GrowableObjectArray_InstanceSize = 24;
@@ -8958,7 +8958,7 @@
40;
static constexpr dart::compiler::target::word AOT_TypeParameters_InstanceSize =
24;
-static constexpr dart::compiler::target::word AOT_TypeRef_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_TypeRef_InstanceSize = 32;
static constexpr dart::compiler::target::word AOT_TypedData_HeaderSize = 24;
static constexpr dart::compiler::target::word AOT_TypedDataBase_InstanceSize =
24;
@@ -9412,29 +9412,29 @@
AOT_TimelineStream_enabled_offset = 16;
static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
16;
-static constexpr dart::compiler::target::word AOT_Type_arguments_offset = 24;
-static constexpr dart::compiler::target::word AOT_Type_hash_offset = 28;
+static constexpr dart::compiler::target::word AOT_Type_arguments_offset = 28;
+static constexpr dart::compiler::target::word AOT_Type_hash_offset = 32;
static constexpr dart::compiler::target::word AOT_Type_type_class_id_offset =
- 20;
-static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 32;
-static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 33;
-static constexpr dart::compiler::target::word AOT_FunctionType_hash_offset = 36;
+ 24;
+static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 36;
+static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 37;
+static constexpr dart::compiler::target::word AOT_FunctionType_hash_offset = 40;
static constexpr dart::compiler::target::word
- AOT_FunctionType_packed_parameter_counts_offset = 40;
+ AOT_FunctionType_packed_parameter_counts_offset = 44;
static constexpr dart::compiler::target::word
- AOT_FunctionType_packed_type_parameter_counts_offset = 44;
+ AOT_FunctionType_packed_type_parameter_counts_offset = 48;
static constexpr dart::compiler::target::word
- AOT_FunctionType_parameter_types_offset = 28;
+ AOT_FunctionType_parameter_types_offset = 32;
static constexpr dart::compiler::target::word
- AOT_FunctionType_named_parameter_names_offset = 32;
+ AOT_FunctionType_named_parameter_names_offset = 36;
static constexpr dart::compiler::target::word
- AOT_FunctionType_type_parameters_offset = 20;
+ AOT_FunctionType_type_parameters_offset = 24;
static constexpr dart::compiler::target::word
- AOT_TypeParameter_parameterized_class_id_offset = 28;
+ AOT_TypeParameter_parameterized_class_id_offset = 32;
static constexpr dart::compiler::target::word AOT_TypeParameter_index_offset =
- 31;
+ 35;
static constexpr dart::compiler::target::word
- AOT_TypeParameter_nullability_offset = 33;
+ AOT_TypeParameter_nullability_offset = 37;
static constexpr dart::compiler::target::word
AOT_TypeArguments_instantiations_offset = 8;
static constexpr dart::compiler::target::word AOT_TypeArguments_length_offset =
@@ -9452,16 +9452,16 @@
static constexpr dart::compiler::target::word
AOT_TypeParameters_defaults_offset = 20;
static constexpr dart::compiler::target::word AOT_TypeParameter_bound_offset =
- 24;
+ 28;
static constexpr dart::compiler::target::word AOT_TypeParameter_flags_offset =
- 32;
-static constexpr dart::compiler::target::word AOT_TypeRef_type_offset = 20;
+ 36;
+static constexpr dart::compiler::target::word AOT_TypeRef_type_offset = 24;
static constexpr dart::compiler::target::word AOT_TypedDataBase_length_offset =
- 16;
-static constexpr dart::compiler::target::word AOT_TypedDataView_data_offset =
20;
+static constexpr dart::compiler::target::word AOT_TypedDataView_data_offset =
+ 24;
static constexpr dart::compiler::target::word
- AOT_TypedDataView_offset_in_bytes_offset = 24;
+ AOT_TypedDataView_offset_in_bytes_offset = 28;
static constexpr dart::compiler::target::word AOT_TypedData_data_offset = 24;
static constexpr dart::compiler::target::word
AOT_UnhandledException_exception_offset = 8;
@@ -9513,7 +9513,7 @@
static constexpr dart::compiler::target::word AOT_Float64x2_InstanceSize = 24;
static constexpr dart::compiler::target::word AOT_Function_InstanceSize = 56;
static constexpr dart::compiler::target::word AOT_FunctionType_InstanceSize =
- 48;
+ 56;
static constexpr dart::compiler::target::word AOT_FutureOr_InstanceSize = 16;
static constexpr dart::compiler::target::word
AOT_GrowableObjectArray_InstanceSize = 24;
@@ -9568,7 +9568,7 @@
40;
static constexpr dart::compiler::target::word AOT_TypeParameters_InstanceSize =
24;
-static constexpr dart::compiler::target::word AOT_TypeRef_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_TypeRef_InstanceSize = 32;
static constexpr dart::compiler::target::word AOT_TypedData_HeaderSize = 24;
static constexpr dart::compiler::target::word AOT_TypedDataBase_InstanceSize =
24;
@@ -11826,29 +11826,29 @@
AOT_TimelineStream_enabled_offset = 16;
static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
16;
-static constexpr dart::compiler::target::word AOT_Type_arguments_offset = 24;
-static constexpr dart::compiler::target::word AOT_Type_hash_offset = 28;
+static constexpr dart::compiler::target::word AOT_Type_arguments_offset = 28;
+static constexpr dart::compiler::target::word AOT_Type_hash_offset = 32;
static constexpr dart::compiler::target::word AOT_Type_type_class_id_offset =
- 20;
-static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 32;
-static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 33;
-static constexpr dart::compiler::target::word AOT_FunctionType_hash_offset = 36;
+ 24;
+static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 36;
+static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 37;
+static constexpr dart::compiler::target::word AOT_FunctionType_hash_offset = 40;
static constexpr dart::compiler::target::word
- AOT_FunctionType_packed_parameter_counts_offset = 40;
+ AOT_FunctionType_packed_parameter_counts_offset = 44;
static constexpr dart::compiler::target::word
- AOT_FunctionType_packed_type_parameter_counts_offset = 44;
+ AOT_FunctionType_packed_type_parameter_counts_offset = 48;
static constexpr dart::compiler::target::word
- AOT_FunctionType_parameter_types_offset = 28;
+ AOT_FunctionType_parameter_types_offset = 32;
static constexpr dart::compiler::target::word
- AOT_FunctionType_named_parameter_names_offset = 32;
+ AOT_FunctionType_named_parameter_names_offset = 36;
static constexpr dart::compiler::target::word
- AOT_FunctionType_type_parameters_offset = 20;
+ AOT_FunctionType_type_parameters_offset = 24;
static constexpr dart::compiler::target::word
- AOT_TypeParameter_parameterized_class_id_offset = 28;
+ AOT_TypeParameter_parameterized_class_id_offset = 32;
static constexpr dart::compiler::target::word AOT_TypeParameter_index_offset =
- 31;
+ 35;
static constexpr dart::compiler::target::word
- AOT_TypeParameter_nullability_offset = 33;
+ AOT_TypeParameter_nullability_offset = 37;
static constexpr dart::compiler::target::word
AOT_TypeArguments_instantiations_offset = 8;
static constexpr dart::compiler::target::word AOT_TypeArguments_length_offset =
@@ -11866,16 +11866,16 @@
static constexpr dart::compiler::target::word
AOT_TypeParameters_defaults_offset = 20;
static constexpr dart::compiler::target::word AOT_TypeParameter_bound_offset =
- 24;
+ 28;
static constexpr dart::compiler::target::word AOT_TypeParameter_flags_offset =
- 32;
-static constexpr dart::compiler::target::word AOT_TypeRef_type_offset = 20;
+ 36;
+static constexpr dart::compiler::target::word AOT_TypeRef_type_offset = 24;
static constexpr dart::compiler::target::word AOT_TypedDataBase_length_offset =
- 16;
-static constexpr dart::compiler::target::word AOT_TypedDataView_data_offset =
20;
+static constexpr dart::compiler::target::word AOT_TypedDataView_data_offset =
+ 24;
static constexpr dart::compiler::target::word
- AOT_TypedDataView_offset_in_bytes_offset = 24;
+ AOT_TypedDataView_offset_in_bytes_offset = 28;
static constexpr dart::compiler::target::word AOT_TypedData_data_offset = 24;
static constexpr dart::compiler::target::word
AOT_UnhandledException_exception_offset = 8;
@@ -11926,7 +11926,7 @@
static constexpr dart::compiler::target::word AOT_Float64x2_InstanceSize = 24;
static constexpr dart::compiler::target::word AOT_Function_InstanceSize = 56;
static constexpr dart::compiler::target::word AOT_FunctionType_InstanceSize =
- 48;
+ 56;
static constexpr dart::compiler::target::word AOT_FutureOr_InstanceSize = 16;
static constexpr dart::compiler::target::word
AOT_GrowableObjectArray_InstanceSize = 24;
@@ -11981,7 +11981,7 @@
40;
static constexpr dart::compiler::target::word AOT_TypeParameters_InstanceSize =
24;
-static constexpr dart::compiler::target::word AOT_TypeRef_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_TypeRef_InstanceSize = 32;
static constexpr dart::compiler::target::word AOT_TypedData_HeaderSize = 24;
static constexpr dart::compiler::target::word AOT_TypedDataBase_InstanceSize =
24;
@@ -12428,29 +12428,29 @@
AOT_TimelineStream_enabled_offset = 16;
static constexpr dart::compiler::target::word AOT_TwoByteString_data_offset =
16;
-static constexpr dart::compiler::target::word AOT_Type_arguments_offset = 24;
-static constexpr dart::compiler::target::word AOT_Type_hash_offset = 28;
+static constexpr dart::compiler::target::word AOT_Type_arguments_offset = 28;
+static constexpr dart::compiler::target::word AOT_Type_hash_offset = 32;
static constexpr dart::compiler::target::word AOT_Type_type_class_id_offset =
- 20;
-static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 32;
-static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 33;
-static constexpr dart::compiler::target::word AOT_FunctionType_hash_offset = 36;
+ 24;
+static constexpr dart::compiler::target::word AOT_Type_type_state_offset = 36;
+static constexpr dart::compiler::target::word AOT_Type_nullability_offset = 37;
+static constexpr dart::compiler::target::word AOT_FunctionType_hash_offset = 40;
static constexpr dart::compiler::target::word
- AOT_FunctionType_packed_parameter_counts_offset = 40;
+ AOT_FunctionType_packed_parameter_counts_offset = 44;
static constexpr dart::compiler::target::word
- AOT_FunctionType_packed_type_parameter_counts_offset = 44;
+ AOT_FunctionType_packed_type_parameter_counts_offset = 48;
static constexpr dart::compiler::target::word
- AOT_FunctionType_parameter_types_offset = 28;
+ AOT_FunctionType_parameter_types_offset = 32;
static constexpr dart::compiler::target::word
- AOT_FunctionType_named_parameter_names_offset = 32;
+ AOT_FunctionType_named_parameter_names_offset = 36;
static constexpr dart::compiler::target::word
- AOT_FunctionType_type_parameters_offset = 20;
+ AOT_FunctionType_type_parameters_offset = 24;
static constexpr dart::compiler::target::word
- AOT_TypeParameter_parameterized_class_id_offset = 28;
+ AOT_TypeParameter_parameterized_class_id_offset = 32;
static constexpr dart::compiler::target::word AOT_TypeParameter_index_offset =
- 31;
+ 35;
static constexpr dart::compiler::target::word
- AOT_TypeParameter_nullability_offset = 33;
+ AOT_TypeParameter_nullability_offset = 37;
static constexpr dart::compiler::target::word
AOT_TypeArguments_instantiations_offset = 8;
static constexpr dart::compiler::target::word AOT_TypeArguments_length_offset =
@@ -12468,16 +12468,16 @@
static constexpr dart::compiler::target::word
AOT_TypeParameters_defaults_offset = 20;
static constexpr dart::compiler::target::word AOT_TypeParameter_bound_offset =
- 24;
+ 28;
static constexpr dart::compiler::target::word AOT_TypeParameter_flags_offset =
- 32;
-static constexpr dart::compiler::target::word AOT_TypeRef_type_offset = 20;
+ 36;
+static constexpr dart::compiler::target::word AOT_TypeRef_type_offset = 24;
static constexpr dart::compiler::target::word AOT_TypedDataBase_length_offset =
- 16;
-static constexpr dart::compiler::target::word AOT_TypedDataView_data_offset =
20;
+static constexpr dart::compiler::target::word AOT_TypedDataView_data_offset =
+ 24;
static constexpr dart::compiler::target::word
- AOT_TypedDataView_offset_in_bytes_offset = 24;
+ AOT_TypedDataView_offset_in_bytes_offset = 28;
static constexpr dart::compiler::target::word AOT_TypedData_data_offset = 24;
static constexpr dart::compiler::target::word
AOT_UnhandledException_exception_offset = 8;
@@ -12529,7 +12529,7 @@
static constexpr dart::compiler::target::word AOT_Float64x2_InstanceSize = 24;
static constexpr dart::compiler::target::word AOT_Function_InstanceSize = 56;
static constexpr dart::compiler::target::word AOT_FunctionType_InstanceSize =
- 48;
+ 56;
static constexpr dart::compiler::target::word AOT_FutureOr_InstanceSize = 16;
static constexpr dart::compiler::target::word
AOT_GrowableObjectArray_InstanceSize = 24;
@@ -12584,7 +12584,7 @@
40;
static constexpr dart::compiler::target::word AOT_TypeParameters_InstanceSize =
24;
-static constexpr dart::compiler::target::word AOT_TypeRef_InstanceSize = 24;
+static constexpr dart::compiler::target::word AOT_TypeRef_InstanceSize = 32;
static constexpr dart::compiler::target::word AOT_TypedData_HeaderSize = 24;
static constexpr dart::compiler::target::word AOT_TypedDataBase_InstanceSize =
24;
diff --git a/runtime/vm/object_service.cc b/runtime/vm/object_service.cc
index 95358c6..1685ebf 100644
--- a/runtime/vm/object_service.cc
+++ b/runtime/vm/object_service.cc
@@ -94,6 +94,15 @@
jsobj.AddProperty("library", Object::Handle(library()));
+ const intptr_t num_type_params = NumTypeParameters();
+ if (num_type_params > 0) {
+ JSONArray jsarr(&jsobj, "typeParameters");
+ TypeParameter& type_param = TypeParameter::Handle();
+ for (intptr_t i = 0; i < num_type_params; ++i) {
+ type_param = TypeParameterAt(i);
+ jsarr.AddValue(type_param);
+ }
+ }
if (ref) {
return;
}
@@ -172,8 +181,10 @@
}
void TypeParameters::PrintJSONImpl(JSONStream* stream, bool ref) const {
+ // Consider making this type public if we decide to expose TypeParameters
+ // through the protocol.
JSONObject jsobj(stream);
- jsobj.AddProperty("kind", "TypeParameters");
+ jsobj.AddProperty("kind", "_TypeParameters");
jsobj.AddProperty("flags", Array::Handle(flags()));
jsobj.AddProperty("names", Array::Handle(names()));
jsobj.AddProperty("bounds", TypeArguments::Handle(bounds()));
@@ -317,6 +328,7 @@
jsobj.AddProperty("_kind", kind_string);
jsobj.AddProperty("static", is_static());
jsobj.AddProperty("const", is_const());
+ jsobj.AddProperty("implicit", IsImplicitGetterOrSetter());
jsobj.AddProperty("_intrinsic", is_intrinsic());
jsobj.AddProperty("_native", is_native());
@@ -328,6 +340,9 @@
if (ref) {
return;
}
+ const FunctionType& sig = FunctionType::Handle(signature());
+ jsobj.AddProperty("signature", sig);
+
Code& code = Code::Handle(CurrentCode());
if (!code.IsNull()) {
jsobj.AddProperty("code", code);
@@ -1178,7 +1193,38 @@
JSONObject jsobj(stream);
PrintSharedInstanceJSON(&jsobj, ref);
jsobj.AddProperty("kind", "FunctionType");
- // TODO(regis): Function types were not handled before, necessary now?
+ AbstractType& type = AbstractType::Handle(result_type());
+ jsobj.AddProperty("returnType", type);
+
+ const int type_params_count = NumTypeParameters();
+ if (type_params_count > 0) {
+ JSONArray arr(&jsobj, "typeParameters");
+ TypeParameter& type_param = TypeParameter::Handle();
+ for (intptr_t i = 0; i < type_params_count; ++i) {
+ type_param = TypeParameterAt(i);
+ arr.AddValue(type_param);
+ }
+ }
+
+ {
+ JSONArray jsarr(&jsobj, "parameters");
+ String& name = String::Handle();
+ const intptr_t param_count = NumParameters();
+ const intptr_t fixed_param_count = num_fixed_parameters();
+ const bool has_named = HasOptionalNamedParameters();
+ for (intptr_t i = 0; i < param_count; ++i) {
+ JSONObject param(&jsarr);
+ type = ParameterTypeAt(i);
+ param.AddProperty("parameterType", type);
+ bool fixed = i < fixed_param_count;
+ param.AddProperty("fixed", fixed);
+ if (!fixed && has_named) {
+ name = ParameterNameAt(i);
+ param.AddProperty("name", name.ToCString());
+ param.AddProperty("required", IsRequiredAt(i));
+ }
+ }
+ }
}
void TypeRef::PrintJSONImpl(JSONStream* stream, bool ref) const {
diff --git a/runtime/vm/object_test.cc b/runtime/vm/object_test.cc
index 9c07f25..0bce1aa 100644
--- a/runtime/vm/object_test.cc
+++ b/runtime/vm/object_test.cc
@@ -4345,7 +4345,7 @@
ISOLATE_UNIT_TEST_CASE(PrintJSONPrimitives) {
// WARNING: This MUST be big enough for the serialised JSON string.
- const int kBufferSize = 1024;
+ const int kBufferSize = 4096;
char buffer[kBufferSize];
Isolate* isolate = Isolate::Current();
@@ -4396,6 +4396,7 @@
"\"library\":{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"\","
"\"name\":\"dart.core\",\"uri\":\"dart:core\"}},"
"\"_kind\":\"RegularFunction\",\"static\":false,\"const\":false,"
+ "\"implicit\":false,"
"\"_intrinsic\":false,\"_native\":false,"
"\"location\":{\"type\":\"SourceLocation\","
"\"script\":{\"type\":\"@Script\",\"fixedId\":true,\"id\":\"\","
@@ -4543,18 +4544,42 @@
ElideJSONSubstring("objects", buffer, buffer);
ElideJSONSubstring("libraries", buffer, buffer);
ElideJSONSubstring("_List@", buffer, buffer);
- StripTokenPositions(buffer);
- EXPECT_STREQ(
+ ElideJSONSubstring("_TypeParameter@", buffer, buffer);
+ EXPECT_SUBSTRING(
"{\"type\":\"@Instance\",\"_vmType\":\"Array\",\"class\":{\"type\":\"@"
"Class\",\"fixedId\":true,\"id\":\"\",\"name\":\"_List\",\"_vmName\":"
"\"\",\"location\":{\"type\":\"SourceLocation\",\"script\":{\"type\":"
- "\"@Script\",\"fixedId\":true,\"id\":\"\",\"uri\":\"dart:core-"
- "patch\\/array.dart\",\"_kind\":\"kernel\"}"
- "},\"library\":{\"type\":\"@Library\",\"fixedId\":"
+ "\"@Script\",\"fixedId\":true,\"id\":\"\",\"uri\":\"dart:core-patch\\/"
+ "array.dart\",\"_kind\":\"kernel\"},\"tokenPos\":248,\"endTokenPos\":"
+ "7758},\"library\":{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"\","
+ "\"name\":\"dart.core\",\"uri\":\"dart:core\"},\"typeParameters\":[{"
+ "\"type\":\"@"
+ "Instance\",\"_vmType\":\"TypeParameter\",\"class\":{\"type\":\"@"
+ "Class\",\"fixedId\":true,\"id\":\"\",\"name\":\"_TypeParameter\",\"_"
+ "vmName\":\"\",\"location\":{\"type\":"
+ "\"SourceLocation\",\"script\":{\"type\":\"@Script\",\"fixedId\":true,"
+ "\"id\":\"\",\"uri\":\"dart:core-patch\\/"
+ "type_patch.dart\",\"_kind\":\"kernel\"},\"tokenPos\":1584,"
+ "\"endTokenPos\":1729},\"library\":{\"type\":\"@Library\",\"fixedId\":"
"true,\"id\":\"\",\"name\":\"dart.core\",\"uri\":\"dart:core\"}},"
+ "\"identityHashCode\":",
+ buffer);
+
+ EXPECT_SUBSTRING(
+ "\"kind\":\"TypeParameter\",\"id\":\"\",\"name\":\"X0\","
+ "\"parameterizedClass\":{\"type\":\"@Instance\",\"_vmType\":\"Class\","
+ "\"class\":{\"type\":\"@Class\",\"fixedId\":true,\"id\":\"\",\"name\":"
+ "\"Null\",\"location\":{\"type\":\"SourceLocation\",\"script\":{"
+ "\"type\":\"@Script\",\"fixedId\":true,\"id\":\"\",\"uri\":\"dart:"
+ "core\\/"
+ "null.dart\",\"_kind\":\"kernel\"},\"tokenPos\":925,\"endTokenPos\":"
+ "1165},\"library\":{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"\","
+ "\"name\":\"dart.core\",\"uri\":\"dart:core\"}},\"kind\":\"Null\","
+ "\"fixedId\":true,\"id\":\"\",\"valueAsString\":\"null\"}}]},"
"\"identityHashCode\":0,\"kind\":\"List\",\"id\":\"\",\"length\":0}",
buffer);
}
+ OS::PrintErr("\n\n\n");
// GrowableObjectArray reference
{
JSONStream js;
@@ -4568,16 +4593,40 @@
ElideJSONSubstring("libraries", buffer, buffer);
ElideJSONSubstring("_GrowableList@", buffer, buffer);
StripTokenPositions(buffer);
- EXPECT_STREQ(
+ ElideJSONSubstring("_TypeParameter@", buffer, buffer);
+ EXPECT_SUBSTRING(
"{\"type\":\"@Instance\",\"_vmType\":\"GrowableObjectArray\",\"class\":"
"{\"type\":\"@Class\",\"fixedId\":true,\"id\":\"\",\"name\":\"_"
"GrowableList\",\"_vmName\":\"\",\"location\":{\"type\":"
"\"SourceLocation\",\"script\":{\"type\":\"@Script\",\"fixedId\":true,"
- "\"id\":\"\",\"uri\":\"dart:core-patch\\/growable_array.dart\",\"_"
- "kind\":\"kernel\"}},"
- "\"library\":{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"\","
- "\"name\":\"dart.core\",\"uri\":\"dart:core\"}},\"identityHashCode\":0,"
- "\"kind\":\"List\",\"id\":\"\",\"length\":0}",
+ "\"id\":\"\",\"uri\":\"dart:core-patch\\/"
+ "growable_array.dart\",\"_kind\":\"kernel\"}"
+ "},\"library\":{\"type\":\"@Library\",\"fixedId\":"
+ "true,\"id\":\"\",\"name\":\"dart.core\",\"uri\":\"dart:core\"},"
+ "\"typeParameters\":[{\"type\":\"@Instance\",\"_vmType\":"
+ "\"TypeParameter\",\"class\":{\"type\":\"@Class\",\"fixedId\":true,"
+ "\"id\":\"\",\"name\":\"_TypeParameter\",\"_vmName\":\""
+ "\",\"location\":{\"type\":\"SourceLocation\",\"script\":{"
+ "\"type\":\"@Script\",\"fixedId\":true,\"id\":\"\",\"uri\":\"dart:core-"
+ "patch\\/"
+ "type_patch.dart\",\"_kind\":\"kernel\"}"
+ "},\"library\":{\"type\":\"@Library\",\"fixedId\":"
+ "true,\"id\":\"\",\"name\":\"dart.core\",\"uri\":\"dart:core\"}},"
+ "\"identityHashCode\":",
+ buffer);
+
+ EXPECT_SUBSTRING(
+ "\"kind\":\"TypeParameter\",\"id\":"
+ "\"\",\"name\":\"X0\",\"parameterizedClass\":{\"type\":\"@Instance\","
+ "\"_vmType\":\"Class\",\"class\":{\"type\":\"@Class\",\"fixedId\":true,"
+ "\"id\":\"\",\"name\":\"Null\",\"location\":{\"type\":"
+ "\"SourceLocation\",\"script\":{\"type\":\"@Script\",\"fixedId\":true,"
+ "\"id\":\"\",\"uri\":\"dart:core\\/"
+ "null.dart\",\"_kind\":\"kernel\"}"
+ "},\"library\":{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"\","
+ "\"name\":\"dart.core\",\"uri\":\"dart:core\"}},\"kind\":\"Null\","
+ "\"fixedId\":true,\"id\":\"\",\"valueAsString\":\"null\"}}]},"
+ "\"identityHashCode\":0,\"kind\":\"List\",\"id\":\"\",\"length\":0}",
buffer);
}
// LinkedHashMap reference
@@ -4593,15 +4642,61 @@
ElideJSONSubstring("libraries", buffer, buffer);
ElideJSONSubstring("_InternalLinkedHashMap@", buffer, buffer);
StripTokenPositions(buffer);
- EXPECT_STREQ(
+ ElideJSONSubstring("_TypeParameter@", buffer, buffer);
+ EXPECT_SUBSTRING(
"{\"type\":\"@Instance\",\"_vmType\":\"LinkedHashMap\",\"class\":{"
"\"type\":\"@Class\",\"fixedId\":true,\"id\":\"\",\"name\":\"_"
"InternalLinkedHashMap\",\"_vmName\":\"\",\"location\":{\"type\":"
"\"SourceLocation\",\"script\":{\"type\":\"@Script\",\"fixedId\":true,"
- "\"id\":\"\",\"uri\":\"dart:collection-patch\\/compact_hash.dart\",\"_"
- "kind\":\"kernel\"}},"
- "\"library\":{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"\","
- "\"name\":\"dart.collection\",\"uri\":\"dart:collection\"}},"
+ "\"id\":\"\",\"uri\":\"dart:collection-patch\\/"
+ "compact_hash.dart\",\"_kind\":\"kernel\"}"
+ "},\"library\":{\"type\":\"@Library\",\"fixedId\":"
+ "true,\"id\":\"\",\"name\":\"dart.collection\",\"uri\":\"dart:"
+ "collection\"},\"typeParameters\":[{\"type\":\"@Instance\",\"_vmType\":"
+ "\"TypeParameter\",\"class\":{\"type\":\"@Class\",\"fixedId\":true,"
+ "\"id\":\"\",\"name\":\"_TypeParameter\",\"_vmName\":\""
+ "\",\"location\":{\"type\":\"SourceLocation\",\"script\":{"
+ "\"type\":\"@Script\",\"fixedId\":true,\"id\":\"\",\"uri\":\"dart:core-"
+ "patch\\/"
+ "type_patch.dart\",\"_kind\":\"kernel\"}"
+ "},\"library\":{\"type\":\"@Library\",\"fixedId\":"
+ "true,\"id\":\"\",\"name\":\"dart.core\",\"uri\":\"dart:core\"}},"
+ "\"identityHashCode\":",
+ buffer);
+
+ EXPECT_SUBSTRING(
+ "\"kind\":\"TypeParameter\",\"id\":"
+ "\"\",\"name\":\"X0\",\"parameterizedClass\":{\"type\":\"@Instance\","
+ "\"_vmType\":\"Class\",\"class\":{\"type\":\"@Class\",\"fixedId\":true,"
+ "\"id\":\"\",\"name\":\"Null\",\"location\":{\"type\":"
+ "\"SourceLocation\",\"script\":{\"type\":\"@Script\",\"fixedId\":true,"
+ "\"id\":\"\",\"uri\":\"dart:core\\/"
+ "null.dart\",\"_kind\":\"kernel\"}"
+ "},\"library\":{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"\","
+ "\"name\":\"dart.core\",\"uri\":\"dart:core\"}},\"kind\":\"Null\","
+ "\"fixedId\":true,\"id\":\"\",\"valueAsString\":\"null\"}},{\"type\":"
+ "\"@Instance\",\"_vmType\":\"TypeParameter\",\"class\":{\"type\":\"@"
+ "Class\",\"fixedId\":true,\"id\":\"\",\"name\":\"_TypeParameter\",\"_"
+ "vmName\":\"\",\"location\":{\"type\":"
+ "\"SourceLocation\",\"script\":{\"type\":\"@Script\",\"fixedId\":true,"
+ "\"id\":\"\",\"uri\":\"dart:core-patch\\/"
+ "type_patch.dart\",\"_kind\":\"kernel\"}"
+ "},\"library\":{\"type\":\"@Library\",\"fixedId\":"
+ "true,\"id\":\"\",\"name\":\"dart.core\",\"uri\":\"dart:core\"}},"
+ "\"identityHashCode\":",
+ buffer);
+
+ EXPECT_SUBSTRING(
+ "\"kind\":\"TypeParameter\",\"id\":"
+ "\"\",\"name\":\"X1\",\"parameterizedClass\":{\"type\":\"@Instance\","
+ "\"_vmType\":\"Class\",\"class\":{\"type\":\"@Class\",\"fixedId\":true,"
+ "\"id\":\"\",\"name\":\"Null\",\"location\":{\"type\":"
+ "\"SourceLocation\",\"script\":{\"type\":\"@Script\",\"fixedId\":true,"
+ "\"id\":\"\",\"uri\":\"dart:core\\/"
+ "null.dart\",\"_kind\":\"kernel\"}"
+ "},\"library\":{\"type\":\"@Library\",\"fixedId\":true,\"id\":\"\","
+ "\"name\":\"dart.core\",\"uri\":\"dart:core\"}},\"kind\":\"Null\","
+ "\"fixedId\":true,\"id\":\"\",\"valueAsString\":\"null\"}}]},"
"\"identityHashCode\":0,\"kind\":\"Map\",\"id\":\"\",\"length\":0}",
buffer);
}
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h
index b9fd76f..3f7adfe 100644
--- a/runtime/vm/raw_object.h
+++ b/runtime/vm/raw_object.h
@@ -2522,6 +2522,9 @@
// Accessed from generated code.
std::atomic<uword> type_test_stub_entry_point_;
+#if defined(DART_COMPRESSED_POINTERS)
+ uint32_t padding_; // Makes Windows and Posix agree on layout.
+#endif
COMPRESSED_POINTER_FIELD(CodePtr, type_test_stub)
VISIT_FROM(type_test_stub)
@@ -2805,6 +2808,9 @@
// Abstract base class for RawTypedData/RawExternalTypedData/RawTypedDataView.
class UntaggedTypedDataBase : public UntaggedPointerBase {
protected:
+#if defined(DART_COMPRESSED_POINTERS)
+ uint32_t padding_; // Makes Windows and Posix agree on layout.
+#endif
// The length of the view in element sizes (obtainable via
// [TypedDataBase::ElementSizeInBytes]).
COMPRESSED_SMI_FIELD(SmiPtr, length);
diff --git a/runtime/vm/service.h b/runtime/vm/service.h
index 7f5a223..4c87d36 100644
--- a/runtime/vm/service.h
+++ b/runtime/vm/service.h
@@ -15,7 +15,7 @@
namespace dart {
#define SERVICE_PROTOCOL_MAJOR_VERSION 3
-#define SERVICE_PROTOCOL_MINOR_VERSION 49
+#define SERVICE_PROTOCOL_MINOR_VERSION 50
class Array;
class EmbedderServiceHandler;
diff --git a/runtime/vm/service/service.md b/runtime/vm/service/service.md
index fe8233a..6e29e0f 100644
--- a/runtime/vm/service/service.md
+++ b/runtime/vm/service/service.md
@@ -117,6 +117,7 @@
- [NativeFunction](#nativefunction)
- [Null](#null)
- [Object](#object)
+ - [Parameter](#parameter)[
- [PortList](#portlist)
- [ReloadReport](#reloadreport)
- [Response](#response)
@@ -139,6 +140,7 @@
- [TimelineFlags](#timelineflags)
- [Timestamp](#timestamp)
- [TypeArguments](#typearguments)
+ - [TypeParameters](#typeparameters)[
- [UresolvedSourceLocation](#unresolvedsourcelocation)
- [Version](#version)
- [VM](#vm)
@@ -1694,6 +1696,11 @@
// The library which contains this class.
@Library library;
+
+ // The type parameters for the class.
+ //
+ // Provided if the class is generic.
+ @Instance[] typeParameters [optional];
}
```
@@ -1710,6 +1717,11 @@
// The library which contains this class.
@Library library;
+ // The type parameters for the class.
+ //
+ // Provided if the class is generic.
+ @Instance[] typeParameters [optional];
+
// The error which occurred during class finalization, if it exists.
@Error error [optional];
@@ -2427,6 +2439,9 @@
// Is this function const?
bool const;
+ // Is this function implicitly defined (e.g., implicit getter/setter)?
+ bool implicit;
+
// The location of this function in the source code.
SourceLocation location [optional];
}
@@ -2449,9 +2464,15 @@
// Is this function const?
bool const;
+ // Is this function implicitly defined (e.g., implicit getter/setter)?
+ bool implicit;
+
// The location of this function in the source code.
SourceLocation location [optional];
+ // The signature of the function.
+ @Instance signature;
+
// The compiled code associated with this function.
@Code code [optional];
}
@@ -2529,12 +2550,29 @@
// Type
@Class typeClass [optional];
- // The parameterized class of a type parameter:
+ // The parameterized class of a type parameter.
//
// Provided for instance kinds:
// TypeParameter
@Class parameterizedClass [optional];
+ // The return type of a function.
+ //
+ // Provided for instance kinds:
+ // FunctionType
+ @Instance returnType [optional];
+
+ // The list of parameter types for a function.
+ //
+ // Provided for instance kinds:
+ // FunctionType
+ Parameter[] parameters [optional];
+
+ // The type parameters for a function.
+ //
+ // Provided for instance kinds:
+ // FunctionType
+ @Instance[] typeParameters [optional];
// The pattern of a RegExp instance.
//
@@ -2694,6 +2732,24 @@
// TypeParameter
@Class parameterizedClass [optional];
+ // The return type of a function.
+ //
+ // Provided for instance kinds:
+ // FunctionType
+ @Instance returnType [optional];
+
+ // The list of parameter types for a function.
+ //
+ // Provided for instance kinds:
+ // FunctionType
+ Parameter[] parameters [optional];
+
+ // The type parameters for a function.
+ //
+ // Provided for instance kinds:
+ // FunctionType
+ @Instance[] typeParameters [optional];
+
// The fields of this Instance.
BoundField[] fields [optional];
@@ -2911,6 +2967,9 @@
// An instance of the Dart class TypeRef.
TypeRef,
+ // An instance of the Dart class FunctionType.
+ FunctionType,
+
// An instance of the Dart class BoundedType.
BoundedType,
@@ -3362,7 +3421,29 @@
}
```
-An _Object_ is a persistent object that is owned by some isolate.
+An _Object_ is a persistent object that is owned by some isolate.
+
+### Parameter
+
+```
+class Parameter {
+ // The type of the parameter.
+ @Instance parameterType;
+
+ // Represents whether or not this parameter is fixed or optional.
+ bool fixed;
+
+ // The name of a named optional parameter.
+ string name [optional];
+
+ // Whether or not this named optional parameter is marked as required.
+ bool required [optional];
+}
+```
+
+A _Parameter_ is a representation of a function parameter.
+
+See [Instance](#instance).
### PortList
@@ -3914,6 +3995,24 @@
A _TypeArguments_ object represents the type argument vector for some
instantiated generic type.
+### TypeParameters
+
+```
+class TypeParameters {
+ // The names of the type parameters.
+ string[] names;
+
+ // The bounds set on each type parameter.
+ @TypeArguments bounds;
+
+ // The default types for each type parameter.
+ @TypeArguments defaults;
+}
+```
+
+A _TypeParameters_ object represents the type argument vector for some
+uninstantiated generic type.
+
### UnresolvedSourceLocation
```
@@ -4076,5 +4175,6 @@
3.47 | Added `shows` and `hides` properties to `LibraryDependency`.
3.48 | Added `Profiler` stream, `UserTagChanged` event kind, and `updatedTag` and `previousTag` properties to `Event`.
3.49 | Added `CpuSamples` event kind, and `cpuSamples` property to `Event`.
+3.50 | Added `returnType`, `parameters`, and `typeParameters` to `@Instance`, and `implicit` to `@Function`. Added `Parameter` type.
[discuss-list]: https://groups.google.com/a/dartlang.org/forum/#!forum/observatory-discuss
diff --git a/runtime/vm/source_report_test.cc b/runtime/vm/source_report_test.cc
index ad8c574..5934703 100644
--- a/runtime/vm/source_report_test.cc
+++ b/runtime/vm/source_report_test.cc
@@ -497,7 +497,7 @@
ISOLATE_UNIT_TEST_CASE(SourceReport_CallSites_SimpleCall) {
// WARNING: This MUST be big enough for the serialised JSON string.
- const int kBufferSize = 1024;
+ const int kBufferSize = 2048;
char buffer[kBufferSize];
const char* kScript =
"helper0() {}\n"
@@ -537,6 +537,7 @@
"\"name\":\"helper0\",\"owner\":{\"type\":\"@Library\",\"fixedId\":true,"
"\"id\":\"\",\"name\":\"\",\"uri\":\"file:\\/\\/\\/test-lib\"},"
"\"_kind\":\"RegularFunction\",\"static\":true,\"const\":false,"
+ "\"implicit\":false,"
"\"_intrinsic\":false,\"_native\":false,\"location\":{\"type\":"
"\"SourceLocation\",\"script\":{\"type\":\"@Script\",\"fixedId\":true,"
"\"id\":\"\",\"uri\":\"file:\\/\\/\\/test-lib\",\"_kind\":\"kernel\"},"
@@ -617,7 +618,8 @@
"\"library\":{\"type\":\"@Library\",\"fixedId\":true,"
"\"id\":\"\",\"name\":\"\",\"uri\":\"file:\\/\\/\\/test-lib\"}"
"},\"_kind\":\"RegularFunction\","
- "\"static\":false,\"const\":false,\"_intrinsic\":false,"
+ "\"static\":false,\"const\":false,\"implicit\":false,\"_intrinsic\":"
+ "false,"
"\"_native\":false,"
"\"location\":{\"type\":\"SourceLocation\","
"\"script\":{\"type\":\"@Script\",\"fixedId\":true,"
@@ -649,7 +651,8 @@
"\"library\":{\"type\":\"@Library\",\"fixedId\":true,"
"\"id\":\"\",\"name\":\"\",\"uri\":\"file:\\/\\/\\/test-lib\"}"
"},\"_kind\":\"RegularFunction\","
- "\"static\":false,\"const\":false,\"_intrinsic\":false,"
+ "\"static\":false,\"const\":false,\"implicit\":false,\"_intrinsic\":"
+ "false,"
"\"_native\":false,"
"\"location\":{\"type\":\"SourceLocation\","
"\"script\":{\"type\":\"@Script\",\"fixedId\":true,"
@@ -705,7 +708,8 @@
"\"target\":{\"type\":\"@Function\",\"fixedId\":true,\"id\":\"\","
"\"name\":\"helper0\",\"owner\":{\"type\":\"@Library\",\"fixedId\":true,"
"\"id\":\"\",\"name\":\"\",\"uri\":\"file:\\/\\/\\/test-lib\"},\"_"
- "kind\":\"RegularFunction\",\"static\":true,\"const\":false,\"_"
+ "kind\":\"RegularFunction\",\"static\":true,\"const\":false,\"implicit\":"
+ "false,\"_"
"intrinsic\":false,\"_native\":false,\"location\":{\"type\":"
"\"SourceLocation\",\"script\":{\"type\":\"@Script\",\"fixedId\":true,"
"\"id\":\"\",\"uri\":\"file:\\/\\/\\/test-lib\",\"_kind\":\"kernel\"},"
diff --git a/sdk/lib/_internal/js_dev_runtime/patch/js_patch.dart b/sdk/lib/_internal/js_dev_runtime/patch/js_patch.dart
index feb5ef1..033b303 100644
--- a/sdk/lib/_internal/js_dev_runtime/patch/js_patch.dart
+++ b/sdk/lib/_internal/js_dev_runtime/patch/js_patch.dart
@@ -9,6 +9,7 @@
import 'dart:_js_helper' show patch, NoReifyGeneric, Primitives;
import 'dart:_foreign_helper' show JS;
+import 'dart:_interceptors' show JavaScriptObject;
import 'dart:_runtime' as dart;
@patch
@@ -367,7 +368,7 @@
int ms = JS('!', '#.getTime()', o);
return DateTime.fromMillisecondsSinceEpoch(ms);
} else if (o is _DartObject &&
- !identical(dart.getReifiedType(o), dart.jsobject)) {
+ !identical(dart.getReifiedType(o), dart.typeRep<JavaScriptObject>())) {
return o._dartObj;
} else {
return _wrapToDart(o);
diff --git a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/rtti.dart b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/rtti.dart
index 1f362a8..9e99b26 100644
--- a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/rtti.dart
+++ b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/rtti.dart
@@ -92,13 +92,13 @@
return JS('', '#.constructor', obj);
}
var result = JS('', '#[#]', obj, _extensionType);
- if (result == null) return JS('', '#', jsobject);
+ if (result == null) return typeRep<JavaScriptObject>();
return result;
case "function":
// All Dart functions and callable classes must set _runtimeType
var result = JS('', '#[#]', obj, _runtimeType);
if (result != null) return result;
- return JS('', '#', jsobject);
+ return typeRep<JavaScriptObject>();
case "undefined":
return JS('', '#', Null);
case "number":
@@ -109,7 +109,7 @@
return JS('', '#', String);
case "symbol":
default:
- return JS('', '#', jsobject);
+ return typeRep<JavaScriptObject>();
}
}
diff --git a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/runtime.dart b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/runtime.dart
index e4afbf4..2cd212a 100644
--- a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/runtime.dart
+++ b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/runtime.dart
@@ -10,7 +10,8 @@
import 'dart:_debugger' show stackTraceMapper, trackCall;
import 'dart:_foreign_helper' show JS, JSExportName, rest, spread;
-import 'dart:_interceptors' show JSArray, jsNull, JSFunction, NativeError;
+import 'dart:_interceptors'
+ show JSArray, jsNull, JSFunction, NativeError, JavaScriptObject;
import 'dart:_internal' as internal show LateError, Symbol;
import 'dart:_js_helper'
show
diff --git a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/types.dart b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/types.dart
index 7874940..e48e530 100644
--- a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/types.dart
+++ b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/types.dart
@@ -154,7 +154,8 @@
}
@notNull
-bool _isJsObject(obj) => JS('!', '# === #', getReifiedType(obj), jsobject);
+bool _isJsObject(obj) =>
+ JS('!', '# === #', getReifiedType(obj), typeRep<JavaScriptObject>());
/// Asserts that [f] is a native JS functions and returns it if so.
///
@@ -237,7 +238,7 @@
return raw;
}
- Object rawJSTypeForCheck() => _getRawJSType() ?? jsobject;
+ Object rawJSTypeForCheck() => _getRawJSType() ?? typeRep<JavaScriptObject>();
@notNull
@JSExportName('is')
@@ -478,12 +479,6 @@
final bottom = unwrapType(Null);
-class JSObjectType extends DartType {
- toString() => 'NativeJavaScriptObject';
-}
-
-final jsobject = JSObjectType();
-
/// Dev Compiler's implementation of Type, wrapping its internal [_type].
class _Type extends Type {
/// The internal type representation, either a [DartType] or class constructor
@@ -1518,8 +1513,43 @@
return ${_equalType(t2, Function)};
}
- // All JS types are subtypes of anonymous JS types.
- if ($t1 === $jsobject && ${_jsInstanceOf(t2, AnonymousJSType)}) {
+ // Even though lazy and anonymous JS types are natural subtypes of
+ // JavaScriptObject, JS types should be treated as mutual subtypes of each
+ // other. This allows users to be able to interface with both extension
+ // types on JavaScriptObject and package:js using the same object.
+ //
+ // Therefore, the following relationships hold true:
+ //
+ // JavaScriptObject <: package:js types
+ // package:js types <: JavaScriptObject
+ //
+ // TODO: This doesn't allow package:js type <: another package:js type yet.
+
+ if (${_isInterfaceSubtype(t1, JavaScriptObject, strictMode)}
+ && (${_jsInstanceOf(t2, LazyJSType)}
+ || ${_jsInstanceOf(t2, AnonymousJSType)}
+ // TODO: Since package:js types are instances of LazyJSType and
+ // AnonymousJSType, we don't have a mechanism to determine if *some*
+ // package:js type implements t2. This will possibly require keeping
+ // a map of these relationships for this subtyping check. For now,
+ // don't execute the following checks.
+ // || _isInterfaceSubtype(LazyJSType, t2, strictMode)
+ // || _isInterfaceSubtype(AnonymousJSType, t2, strictMode)
+ )) {
+ return true;
+ }
+
+ if (${_isInterfaceSubtype(JavaScriptObject, t2, strictMode)}
+ && (${_jsInstanceOf(t1, LazyJSType)}
+ || ${_jsInstanceOf(t1, AnonymousJSType)}
+ // TODO: We don't have a check in `isInterfaceSubtype` to check that
+ // a class is a subtype of *some* package:js class. This will likely
+ // require modifying `_isInterfaceSubtype` to check if the
+ // interfaces of t1 include a package:js type. For now, don't
+ // execute the following checks.
+ // || _isInterfaceSubtype(t1, LazyJSType, strictMode)
+ // || _isInterfaceSubtype(t1, AnonymousJSType, strictMode)
+ )) {
return true;
}
diff --git a/sdk/lib/_internal/js_dev_runtime/private/interceptors.dart b/sdk/lib/_internal/js_dev_runtime/private/interceptors.dart
index 71c559c..fdc771d 100644
--- a/sdk/lib/_internal/js_dev_runtime/private/interceptors.dart
+++ b/sdk/lib/_internal/js_dev_runtime/private/interceptors.dart
@@ -74,45 +74,40 @@
operator []=(int index, E value);
}
-/**
- * The interface implemented by JavaScript objects. These are methods in
- * addition to the regular Dart Object methods like [Object.hashCode].
- *
- * This is the type that should be exported by a JavaScript interop library.
- */
+/// The interface implemented by JavaScript objects.
+///
+/// These are methods in addition to the regular Dart Object methods like
+/// [Object.hashCode]. This is the type that should be exported by a JavaScript
+/// interop library.
abstract class JSObject {}
-/**
- * Interceptor base class for JavaScript objects not recognized as some more
- * specific native type.
- */
+/// Interceptor base class for JavaScript objects not recognized as some more
+/// specific native type.
+
+/// Unlike dart2js, ddc does not intercept JS objects, so this is only used as
+/// an on-type for JS interop extension types. All JS interop objects should be
+/// castable to this type.
abstract class JavaScriptObject extends Interceptor implements JSObject {
const JavaScriptObject();
-
- // It would be impolite to stash a property on the object.
- int get hashCode => 0;
-
- Type get runtimeType => JSObject;
}
-/**
- * Interceptor for plain JavaScript objects created as JavaScript object
- * literals or `new Object()`.
- */
+/// Interceptor for plain JavaScript objects created as JavaScript object
+/// literals or `new Object()`.
+///
+/// Note that this isn't being used today in ddc. Instead of using interceptors,
+/// we have other type logic to distinguish JS types.
class PlainJavaScriptObject extends JavaScriptObject {
const PlainJavaScriptObject();
}
-/**
- * Interceptor for unclassified JavaScript objects, typically objects with a
- * non-trivial prototype chain.
- *
- * This class also serves as a fallback for unknown JavaScript exceptions.
- */
+/// Interceptor for unclassified JavaScript objects, typically objects with a
+/// non-trivial prototype chain.
+///
+/// This class also serves as a fallback for unknown JavaScript exceptions.
+/// Note that this isn't being used today in ddc. Instead of using interceptors,
+/// we have other type logic to distinguish JS types.
class UnknownJavaScriptObject extends JavaScriptObject {
const UnknownJavaScriptObject();
-
- String toString() => JS<String>('!', 'String(#)', this);
}
class NativeError extends Interceptor {
diff --git a/sdk/lib/html/dart2js/html_dart2js.dart b/sdk/lib/html/dart2js/html_dart2js.dart
index 7f6f21b..15695c1 100644
--- a/sdk/lib/html/dart2js/html_dart2js.dart
+++ b/sdk/lib/html/dart2js/html_dart2js.dart
@@ -13442,7 +13442,7 @@
* var createdElement = document.body.children[0];
* print(createdElement.classes[0]); // Prints 'something'
* ```
- *
+ *
* See also:
*
* * [insertAdjacentText]
@@ -36529,7 +36529,7 @@
* This is equivalent to the `height` function in jQuery and the calculated
* `height` CSS value, converted to a dimensionless num in pixels. Unlike
* [Element.getBoundingClientRect], `height` will return the same numerical
- * width if the element is hidden or not.
+ * height if the element is hidden or not.
*/
num get height;
@@ -37100,7 +37100,7 @@
new _EventStream<T>(e, _eventType, useCapture);
/**
- * Gets an [Stream] for this event type, on the specified element.
+ * Gets a [Stream] for this event type, on the specified element.
*
* This will always return a broadcast stream so multiple listeners can be
* used simultaneously.
@@ -37126,7 +37126,7 @@
}
/**
- * Gets an [ElementEventStream] for this event type, on the list of elements.
+ * Gets a [Stream] for this event type, on the list of elements.
*
* This will always return a broadcast stream so multiple listeners can be
* used simultaneously.
diff --git a/sdk/lib/indexed_db/dart2js/indexed_db_dart2js.dart b/sdk/lib/indexed_db/dart2js/indexed_db_dart2js.dart
index 455de12..ad56eea 100644
--- a/sdk/lib/indexed_db/dart2js/indexed_db_dart2js.dart
+++ b/sdk/lib/indexed_db/dart2js/indexed_db_dart2js.dart
@@ -89,13 +89,11 @@
static KeyRange createKeyRange_only(/*Key*/ value) =>
_only(_class(), _translateKey(value));
- static KeyRange createKeyRange_lowerBound(
- /*Key*/ bound,
+ static KeyRange createKeyRange_lowerBound(/*Key*/ bound,
[bool open = false]) =>
_lowerBound(_class(), _translateKey(bound), open);
- static KeyRange createKeyRange_upperBound(
- /*Key*/ bound,
+ static KeyRange createKeyRange_upperBound(/*Key*/ bound,
[bool open = false]) =>
_upperBound(_class(), _translateKey(bound), open);
diff --git a/tests/language/constructor/tear_off_test.dart b/tests/language/constructor/tear_off_test.dart
index f890b44..a0764886 100644
--- a/tests/language/constructor/tear_off_test.dart
+++ b/tests/language/constructor/tear_off_test.dart
@@ -24,18 +24,16 @@
const NGenRedir._(this.x);
}
-class NFac {
+class NFac implements NFacRedir {
final int x;
- factory NFac(int x) => NFacRedir._(x);
- factory NFac.named(int x) => NFacRedir._(x);
- NFac._(this.x);
+ factory NFac(int x) => NFac._(x);
+ factory NFac.named(int x) => NFac._(x);
+ const NFac._(this.x);
}
class NFacRedir {
- final int x;
const factory NFacRedir(int x) = NFac._;
const factory NFacRedir.named(int x) = NFac._;
- NFacRedir._(this.x);
}
// Generic classes.
@@ -52,18 +50,16 @@
const GGenRedir._(this.x);
}
-class GFac<T> {
+class GFac<T> implements GFacRedir<T> {
final int x;
- factory GFac(int x) => GFacRedir._(x);
- factory GFac.named(int x) => GFacRedir._(x);
- GFac._(this.x);
+ factory GFac(int x) => GFac._(x);
+ factory GFac.named(int x) => GFac._(x);
+ const GFac._(this.x);
}
class GFacRedir<T> {
- final int x;
const factory GFacRedir(int x) = GFac._;
const factory GFacRedir.named(int x) = GFac._;
- GFacRedir._(this.x);
}
class Optional<T> {
@@ -96,9 +92,9 @@
GGen<int>.new.expectStaticType<Exactly<GGen<int> Function(int)>>();
GGen<int>.named.expectStaticType<Exactly<GGen<int> Function(int)>>();
GGenRedir<int>.new
- .expectStaticType<Exactly<GGenRedir<T> Function<T>(int)>>();
+ .expectStaticType<Exactly<GGenRedir<int> Function(int)>>();
GGenRedir<int>.named
- .expectStaticType<Exactly<GGenRedir<T> Function<T>(int)>>();
+ .expectStaticType<Exactly<GGenRedir<int> Function(int)>>();
GFac<int>.new.expectStaticType<Exactly<GFac<int> Function(int)>>();
GFac<int>.named.expectStaticType<Exactly<GFac<int> Function(int)>>();
GFacRedir<int>.new
@@ -106,26 +102,26 @@
GFacRedir<int>.named
.expectStaticType<Exactly<GFacRedir<int> Function(int)>>();
- contextType<GGen<int> Function(int)>(
+ context<GGen<int> Function(int)>(
GGen.new..expectStaticType<Exactly<GGen<int> Function(int)>>());
- contextType<GGen<int> Function(int)>(
+ context<GGen<int> Function(int)>(
GGen.named..expectStaticType<Exactly<GGen<int> Function(int)>>());
- contextType<GGenRedir<int> Function(int)>(GGenRedir.new
+ context<GGenRedir<int> Function(int)>(GGenRedir.new
..expectStaticType<Exactly<GGenRedir<int> Function(int)>>());
- contextType<GGenRedir<int> Function(int)>(GGenRedir.named
+ context<GGenRedir<int> Function(int)>(GGenRedir.named
..expectStaticType<Exactly<GGenRedir<int> Function(int)>>());
- contextType<GFac<int> Function(int)>(
+ context<GFac<int> Function(int)>(
GFac.new..expectStaticType<Exactly<GFac<int> Function(int)>>());
- contextType<GFac<int> Function(int)>(
+ context<GFac<int> Function(int)>(
GFac.named..expectStaticType<Exactly<GFac<int> Function(int)>>());
- contextType<GFacRedir<int> Function(int)>(
+ context<GFacRedir<int> Function(int)>(
GFacRedir.new..expectStaticType<Exactly<GFacRedir<int> Function(int)>>());
- contextType<GFacRedir<int> Function(int)>(GFacRedir.named
+ context<GFacRedir<int> Function(int)>(GFacRedir.named
..expectStaticType<Exactly<GFacRedir<int> Function(int)>>());
- contextType<Optional<int> Function()>(Optional.new
+ context<Optional<int> Function()>(Optional.new
..expectStaticType<Exactly<Optional<int> Function([int, int])>>());
- contextType<Optional<int> Function()>(Optional.named
+ context<Optional<int> Function()>(Optional.named
..expectStaticType<Exactly<Optional<int> Function({int x, int y})>>());
// Check that tear-offs are canonicalized where possible
diff --git a/tests/language/static_type_helper.dart b/tests/language/static_type_helper.dart
index 4a7809a..14acd63 100644
--- a/tests/language/static_type_helper.dart
+++ b/tests/language/static_type_helper.dart
@@ -6,7 +6,7 @@
Type typeOf<T>() => T;
/// Ensures a context type of [T] for the operand.
-void context<T>(T x) {}
+Object? context<T>(T x) => x;
/// Captures the context type of the call and returns the same type.
///
diff --git a/tests/language/type_object/explicit_instantiated_type_literal_test.dart b/tests/language/type_object/explicit_instantiated_type_literal_test.dart
index 07fa243..6b3b07f 100644
--- a/tests/language/type_object/explicit_instantiated_type_literal_test.dart
+++ b/tests/language/type_object/explicit_instantiated_type_literal_test.dart
@@ -18,8 +18,8 @@
Type type<T>() => T;
void main() {
- C.expectStaticType<Type>();
- C<int>.expectStaticType<Type>();
+ (C).expectStaticType<Exactly<Type>>();
+ (C<int>).expectStaticType<Exactly<Type>>();
Expect.identical(C<num>, C);
Expect.identical(C<int>, C<int>);
@@ -30,8 +30,8 @@
Expect.identical(C<dynamic>, C<dynamic>);
Expect.equals(C<dynamic>, type<C<dynamic>>());
- prefix.C.expectStaticType<Type>();
- prefix.C<int>.expectStaticType<Type>();
+ (prefix.C).expectStaticType<Exactly<Type>>();
+ (prefix.C<int>).expectStaticType<Exactly<Type>>();
Expect.identical(prefix.C<num>, prefix.C);
Expect.identical(prefix.C<int>, prefix.C<int>);
diff --git a/tests/language/typedef/aliased_constructor_tear_off_test.dart b/tests/language/typedef/aliased_constructor_tear_off_test.dart
index e63b693..7d51dfb 100644
--- a/tests/language/typedef/aliased_constructor_tear_off_test.dart
+++ b/tests/language/typedef/aliased_constructor_tear_off_test.dart
@@ -14,7 +14,7 @@
void use(Type type) {}
class C<T> {
- final T value;
+ final T x;
C(this.x);
C.named(this.x);
}
@@ -37,7 +37,7 @@
// or if instantiated with a constant type.
const List<Object> constructors = [
Special.new,
- Spceial.named,
+ Special.named,
Direct.new,
Direct.named,
Bounded.new,
@@ -64,12 +64,12 @@
Wrapping.new,
Wrapping.named,
],
- const <C<int, int> Function(C<int>)>[
+ const <C<int> Function(int)>[
Extra.new,
Extra.named,
]
];
- Expect.notNull(constructors); // Use variable.
+ Expect.isNotNull(constructors); // Use variable.
// The static type is as expected.
@@ -83,8 +83,8 @@
Bounded.new.expectStaticType<Exactly<C<T> Function<T extends num>(T)>>();
Bounded.named.expectStaticType<Exactly<C<T> Function<T extends num>(T)>>();
- Wrapping.new.expectStaticType<Exactly<C<C<T>> Function<T>(T)>>();
- Wrapping.named.expectStaticType<Exactly<C<C<T>> Function<T>(T)>>();
+ Wrapping.new.expectStaticType<Exactly<C<C<T>> Function<T>(C<T>)>>();
+ Wrapping.named.expectStaticType<Exactly<C<C<T>> Function<T>(C<T>)>>();
Extra.new.expectStaticType<Exactly<C<T> Function<T, S>(T)>>();
Extra.named.expectStaticType<Exactly<C<T> Function<T, S>(T)>>();
@@ -105,24 +105,24 @@
Extra<int, String>.named.expectStaticType<Exactly<C<int> Function(int)>>();
// Implicitly instantiated.
- contextType<C<int> Function(int)>(
- Direct<int>.new..expectStaticType<Exactly<C<int> Function(int)>>());
- contextType<C<int> Function(int)>(
- Direct<int>.named..expectStaticType<Exactly<C<int> Function(int)>>());
+ context<C<int> Function(int)>(
+ Direct.new..expectStaticType<Exactly<C<int> Function(int)>>());
+ context<C<int> Function(int)>(
+ Direct.named..expectStaticType<Exactly<C<int> Function(int)>>());
- contextType<C<int> Function(int)>(
- Bounded<int>.new..expectStaticType<Exactly<C<int> Function(int)>>());
- contextType<C<int> Function(int)>(
- Bounded<int>.named..expectStaticType<Exactly<C<int> Function(int)>>());
+ context<C<int> Function(int)>(
+ Bounded.new..expectStaticType<Exactly<C<int> Function(int)>>());
+ context<C<int> Function(int)>(
+ Bounded.named..expectStaticType<Exactly<C<int> Function(int)>>());
- contextType<C<C<int>> Function(C<int>)>(Wrapping<int>.new
+ context<C<C<int>> Function(C<int>)>(Wrapping.new
..expectStaticType<Exactly<C<C<int>> Function(C<int>)>>());
- contextType<C<C<int>> Function(C<int>)>(Wrapping<int>.named
+ context<C<C<int>> Function(C<int>)>(Wrapping.named
..expectStaticType<Exactly<C<C<int>> Function(C<int>)>>());
- contextType<C<int, String> Function(int)>(Extra<int, String>.new
+ context<C<int> Function(int)>(Extra.new
..expectStaticType<Exactly<C<int> Function(int)>>());
- contextType<C<int, String> Function(int)>(Extra<int, String>.named
+ context<C<int> Function(int)>(Extra.named
..expectStaticType<Exactly<C<int> Function(int)>>());
// Uninstantiated tear-offs always canonicalize.
@@ -176,35 +176,35 @@
// Implicit instantiation.
Expect.identical(
- contextType<C<int> Function(int)>(Direct.new),
+ context<C<int> Function(int)>(Direct.new),
C<int>.new,
);
Expect.identical(
- contextType<C<int> Function(int)>(Direct.named),
+ context<C<int> Function(int)>(Direct.named),
C<int>.named,
);
Expect.identical(
- contextType<C<int> Function(int)>(Bounded.new),
+ context<C<int> Function(int)>(Bounded.new),
C<int>.new,
);
Expect.identical(
- contextType<C<int> Function(int)>(Bounded.named),
+ context<C<int> Function(int)>(Bounded.named),
C<int>.named,
);
Expect.identical(
- contextType<C<C<int>> Function(C<int>)>(Wrapping.new),
+ context<C<C<int>> Function(C<int>)>(Wrapping.new),
C<C<int>>.new,
);
Expect.identical(
- contextType<C<C<int>> Function(C<int>)>(Wrapping.named),
+ context<C<C<int>> Function(C<int>)>(Wrapping.named),
C<C<int>>.named,
);
Expect.identical(
- contextType<D<int, String> Function()>(Swapped.new),
+ context<D<int, String> Function()>(Swapped.new),
D<int, String>.new,
);
Expect.identical(
- contextType<D<int, String> Function()>(Swapped.named),
+ context<D<int, String> Function()>(Swapped.named),
D<int, String>.named,
);
diff --git a/tests/language/typedef/aliased_type_literal_instantiation_test.dart b/tests/language/typedef/aliased_type_literal_instantiation_test.dart
index c99e904..25dc8f9 100644
--- a/tests/language/typedef/aliased_type_literal_instantiation_test.dart
+++ b/tests/language/typedef/aliased_type_literal_instantiation_test.dart
@@ -10,7 +10,7 @@
import "package:expect/expect.dart";
class C<T> {
- final T value;
+ final T x;
C(this.x);
C.named(this.x);
}
@@ -55,7 +55,7 @@
Expect.identical(e2, co);
Expect.identical(e3, ci);
- (<T>() {
+ (<T extends num>() {
// Using a non-constant type.
Expect.equals(Direct<T>, ci);
Expect.equals(Bounded<T>, ci);
diff --git a/tools/VERSION b/tools/VERSION
index 1d8f46a..ca41d7f 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 14
PATCH 0
-PRERELEASE 345
+PRERELEASE 346
PRERELEASE_PATCH 0
\ No newline at end of file
diff --git a/tools/dom/docs/docs.json b/tools/dom/docs/docs.json
index f24f9ed..72cf73a 100644
--- a/tools/dom/docs/docs.json
+++ b/tools/dom/docs/docs.json
@@ -117,7 +117,9 @@
"/**",
" * An opaque canvas object representing a gradient.",
" *",
- " * Created by calling [createLinearGradient] or [createRadialGradient] on a",
+ " * Created by calling the methods",
+ " * [CanvasRenderingContext2D.createLinearGradient] or",
+ " * [CanvasRenderingContext2D.createRadialGradient] on a",
" * [CanvasRenderingContext2D] object.",
" *",
" * Example usage:",
@@ -164,7 +166,8 @@
"/**",
" * An opaque object representing a pattern of image, canvas, or video.",
" *",
- " * Created by calling [createPattern] on a [CanvasRenderingContext2D] object.",
+ " * Created by calling [CanvasRenderingContext2D.createPattern] on a",
+ " * [CanvasRenderingContext2D] object.",
" *",
" * Example usage:",
" *",
@@ -2553,7 +2556,7 @@
" * * [COMMENT_NODE] if this node is a [Comment].",
" * * [DOCUMENT_FRAGMENT_NODE] if this node is a [DocumentFragment].",
" * * [DOCUMENT_NODE] if this node is a [Document].",
- " * * [DOCUMENT_TYPE_NODE] if this node is a [DocumentType] node.",
+ " * * [DOCUMENT_TYPE_NODE] if this node is a [_DocumentType] node.",
" * * [ELEMENT_NODE] if this node is an [Element].",
" * * [ENTITY_NODE] if this node is an entity.",
" * * [ENTITY_REFERENCE_NODE] if this node is an entity reference.",
@@ -3171,7 +3174,7 @@
" * The message event handler receives a [MessageEvent] object",
" * as its sole argument.",
" * You can also define open, close, and error handlers,",
- " * as specified by [WebSocketEvents].",
+ " * as specified by [Event]s.",
" *",
" * For more information, see the",
" * [WebSockets](http://www.dartlang.org/docs/library-tour/#html-websockets)",
@@ -4355,7 +4358,8 @@
" * Length of time in milliseconds before a request is automatically",
" * terminated.",
" *",
- " * When the time has passed, a [TimeoutEvent] is dispatched.",
+ " * When the time has passed, a [HttpRequestEventTarget.timeoutEvent] is",
+ " * dispatched.",
" *",
" * If [timeout] is set to 0, then the request will not time out.",
" *",
@@ -4370,7 +4374,6 @@
"upload": [
"/**",
" * [EventTarget] that can hold listeners to track the progress of the request.",
- " * The events fired will be members of [HttpRequestUploadEvents].",
" */"
],
"withCredentials": [
@@ -5157,9 +5160,9 @@
"/**",
" * Get a Stream that fires events when AudioProcessingEvents occur.",
" * This particular stream is special in that it only allows one listener to a",
- " * given stream. Converting the returned Stream [asBroadcast] will likely ruin",
- " * the soft-real-time properties which which these events are fired and can",
- " * be processed.",
+ " * given stream. Converting the returned [Stream.asBroadcastStream] will",
+ " * likely ruin the soft-real-time properties which which these events are",
+ " * fired and can be processed.",
" */"
]
}
diff --git a/tools/dom/scripts/dartdomgenerator.py b/tools/dom/scripts/dartdomgenerator.py
index 6e529a4..944d36a 100755
--- a/tools/dom/scripts/dartdomgenerator.py
+++ b/tools/dom/scripts/dartdomgenerator.py
@@ -207,9 +207,9 @@
prefix_arg, 'cd', library_dir, ';', copy_dart_script, output_dir, library_filename
])
subprocess.call([command], shell=True)
- prebuilt_dartfmt = os.path.join(utils.CheckedInSdkPath(), 'bin', 'dartfmt')
+ dart_bin = os.path.join(utils.CheckedInSdkPath(), 'bin', 'dart')
sdk_file = os.path.join(library_dir, output_dir, library_filename)
- formatCommand = ' '.join([prebuilt_dartfmt, '-w', sdk_file])
+ formatCommand = ' '.join([dart_bin, 'format', sdk_file])
subprocess.call([formatCommand], shell=True)
diff --git a/tools/dom/src/CssRectangle.dart b/tools/dom/src/CssRectangle.dart
index d26aac7..6aa6393 100644
--- a/tools/dom/src/CssRectangle.dart
+++ b/tools/dom/src/CssRectangle.dart
@@ -182,8 +182,8 @@
*
* This is equivalent to the `height` function in jQuery and the calculated
* `height` CSS value, converted to a dimensionless num in pixels. Unlike
- * [getBoundingClientRect], `height` will return the same numerical width if
- * the element is hidden or not.
+ * [Element.getBoundingClientRect], `height` will return the same numerical
+ * height if the element is hidden or not.
*/
num get height;
@@ -192,8 +192,8 @@
*
* This is equivalent to the `width` function in jQuery and the calculated
* `width` CSS value, converted to a dimensionless num in pixels. Unlike
- * [getBoundingClientRect], `width` will return the same numerical width if
- * the element is hidden or not.
+ * [Element.getBoundingClientRect], `width` will return the same numerical
+ * width if the element is hidden or not.
*/
num get width;
diff --git a/tools/dom/src/EventStreamProvider.dart b/tools/dom/src/EventStreamProvider.dart
index feadc26..90b19aa 100644
--- a/tools/dom/src/EventStreamProvider.dart
+++ b/tools/dom/src/EventStreamProvider.dart
@@ -38,7 +38,7 @@
new _EventStream<T>(e, _eventType, useCapture);
/**
- * Gets an [ElementEventStream] for this event type, on the specified element.
+ * Gets a [Stream] for this event type, on the specified element.
*
* This will always return a broadcast stream so multiple listeners can be
* used simultaneously.
@@ -64,7 +64,7 @@
}
/**
- * Gets an [ElementEventStream] for this event type, on the list of elements.
+ * Gets a [Stream] for this event type, on the list of elements.
*
* This will always return a broadcast stream so multiple listeners can be
* used simultaneously.
diff --git a/tools/dom/templates/html/dart2js/html_dart2js.darttemplate b/tools/dom/templates/html/dart2js/html_dart2js.darttemplate
index 0b19506..fd4069b 100644
--- a/tools/dom/templates/html/dart2js/html_dart2js.darttemplate
+++ b/tools/dom/templates/html/dart2js/html_dart2js.darttemplate
@@ -18,6 +18,7 @@
* For information on writing web apps with Dart, see https://dart.dev/web.
*
* {@category Web}
+ * {@canonicalFor dart:_internal.HttpStatus}
*/
library dart.dom.html;
diff --git a/tools/dom/templates/html/dart2js/indexed_db_dart2js.darttemplate b/tools/dom/templates/html/dart2js/indexed_db_dart2js.darttemplate
index dc05346..8373820 100644
--- a/tools/dom/templates/html/dart2js/indexed_db_dart2js.darttemplate
+++ b/tools/dom/templates/html/dart2js/indexed_db_dart2js.darttemplate
@@ -69,8 +69,6 @@
* basic mechanism that stores data as a [Map],
* and where both the keys and the values are strings.
*
- * * [dart:web_sql]—a database that can be queried with SQL.
- *
* MDN provides [API
* documentation](https://developer.mozilla.org/en-US/docs/Web/API/IndexedDB_API).
*
diff --git a/tools/dom/templates/html/impl/impl_CanvasRenderingContext2D.darttemplate b/tools/dom/templates/html/impl/impl_CanvasRenderingContext2D.darttemplate
index 2e9ba25..ec1f2e4 100644
--- a/tools/dom/templates/html/impl/impl_CanvasRenderingContext2D.darttemplate
+++ b/tools/dom/templates/html/impl/impl_CanvasRenderingContext2D.darttemplate
@@ -279,7 +279,7 @@
* options, such as typeface and size, and the current
* [CanvasRenderingContext2D.fillStyle] for style options such as color.
* The current [CanvasRenderingContext2D.textAlign] and
- * [CanvasRenderingContext2D.textBaseLine] properties are also applied to the
+ * [CanvasRenderingContext2D.textBaseline] properties are also applied to the
* drawn text.
*/
void fillText(String text, num x, num y, [num$NULLABLE maxWidth]) {
diff --git a/tools/dom/templates/html/impl/impl_Element.darttemplate b/tools/dom/templates/html/impl/impl_Element.darttemplate
index 4368af2..fadfc3b 100644
--- a/tools/dom/templates/html/impl/impl_Element.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Element.darttemplate
@@ -215,7 +215,7 @@
CssStyleDeclarationBase get style;
/**
- * Access dimensions and position of the Elements in this list.
+ * Access dimensions and position of the [Element]s in this list.
*
* Setting the height or width properties will set the height or width
* property for all elements in the list. This returns a rectangle with the
@@ -224,46 +224,48 @@
* property. Getting the height or width returns the height or width of the
* first Element in this list.
*
- * Unlike [getBoundingClientRect], the dimensions of this rectangle
+ * Unlike [Element.getBoundingClientRect], the dimensions of this rectangle
* will return the same numerical height if the element is hidden or not.
*/
CssRect get contentEdge;
/**
- * Access dimensions and position of the first Element's content + padding box
- * in this list.
+ * Access dimensions and position of the first [Element]'s content + padding
+ * box in this list.
*
* This returns a rectangle with the dimensions actually available for content
* in this element, in pixels, regardless of this element's box-sizing
- * property. Unlike [getBoundingClientRect], the dimensions of this rectangle
- * will return the same numerical height if the element is hidden or not. This
- * can be used to retrieve jQuery's `innerHeight` value for an element. This
- * is also a rectangle equalling the dimensions of clientHeight and
- * clientWidth.
+ * property. Unlike [Element.getBoundingClientRect], the dimensions of this
+ * rectangle will return the same numerical height if the element is hidden
+ * or not. This can be used to retrieve jQuery's `innerHeight` value for an
+ * element. This is also a rectangle equalling the dimensions of clientHeight
+ * and clientWidth.
*/
CssRect get paddingEdge;
/**
- * Access dimensions and position of the first Element's content + padding +
+ * Access dimensions and position of the first [Element]'s content + padding +
* border box in this list.
*
* This returns a rectangle with the dimensions actually available for content
* in this element, in pixels, regardless of this element's box-sizing
- * property. Unlike [getBoundingClientRect], the dimensions of this rectangle
- * will return the same numerical height if the element is hidden or not. This
- * can be used to retrieve jQuery's `outerHeight` value for an element.
+ * property. Unlike [Element.getBoundingClientRect], the dimensions of this
+ * rectangle will return the same numerical height if the element is hidden
+ * or not. This can be used to retrieve jQuery's `outerHeight` value for an
+ * element.
*/
CssRect get borderEdge;
/**
- * Access dimensions and position of the first Element's content + padding +
+ * Access dimensions and position of the first [Element]'s content + padding +
* border + margin box in this list.
*
* This returns a rectangle with the dimensions actually available for content
* in this element, in pixels, regardless of this element's box-sizing
- * property. Unlike [getBoundingClientRect], the dimensions of this rectangle
- * will return the same numerical height if the element is hidden or not. This
- * can be used to retrieve jQuery's `outerHeight` value for an element.
+ * property. Unlike [Element.getBoundingClientRect], the dimensions of this
+ * rectangle will return the same numerical height if the element is hidden
+ * or not. This can be used to retrieve jQuery's `outerHeight` value for an
+ * element.
*/
CssRect get marginEdge;
$!STREAM_GETTER_SIGNATURES
@@ -927,9 +929,9 @@
*
* The [frames] parameter is an Iterable<Map>, where the
* map entries specify CSS animation effects. The
- * [timing] paramter can be a double, representing the number of milliseconds
- * for the transition, or a Map with fields corresponding to those
- * of the [Timing] object.
+ * [timing] parameter can be a double, representing the number of
+ * milliseconds for the transition, or a Map with fields corresponding to
+ * those of the [timing] object.
*/
@SupportedBrowser(SupportedBrowser.CHROME, '36')
Animation animate(Iterable<Map<String, dynamic>> frames, [timing]) {
@@ -1081,11 +1083,13 @@
* * 'beforeEnd': As the last child of this element.
* * 'afterEnd': Immediately after this element.
*
+ * ```dart
* var html = '<div class="something">content</div>';
* // Inserts as the first child
* document.body.insertAdjacentHtml('afterBegin', html);
* var createdElement = document.body.children[0];
* print(createdElement.classes[0]); // Prints 'something'
+ * ```
*
* See also:
*
diff --git a/tools/dom/templates/html/impl/impl_HTMLInputElement.darttemplate b/tools/dom/templates/html/impl/impl_HTMLInputElement.darttemplate
index 19aa838..50f57db 100644
--- a/tools/dom/templates/html/impl/impl_HTMLInputElement.darttemplate
+++ b/tools/dom/templates/html/impl/impl_HTMLInputElement.darttemplate
@@ -463,7 +463,7 @@
/**
- * A control that when used with other [ReadioButtonInputElement] controls
+ * A control that when used with other [RadioButtonInputElement] controls
* forms a radio button group in which only one control can be checked at a
* time.
*
diff --git a/tools/dom/templates/html/impl/impl_Window.darttemplate b/tools/dom/templates/html/impl/impl_Window.darttemplate
index 98e07f0..15f8219 100644
--- a/tools/dom/templates/html/impl/impl_Window.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Window.darttemplate
@@ -157,8 +157,8 @@
/**
* Gets an instance of the Indexed DB factory to being using Indexed DB.
*
- * Use [indexed_db.IdbFactory.supported] to check if Indexed DB is supported on the
- * current platform.
+ * Use [dart:indexed_db.IdbFactory.supported] to check if Indexed DB is
+ * supported on the current platform.
*/
@SupportedBrowser(SupportedBrowser.CHROME, '23.0')
@SupportedBrowser(SupportedBrowser.FIREFOX, '15.0')
diff --git a/tools/dom/templates/html/impl/impl_XMLHttpRequest.darttemplate b/tools/dom/templates/html/impl/impl_XMLHttpRequest.darttemplate
index 44d7ea4..7e92f1d 100644
--- a/tools/dom/templates/html/impl/impl_XMLHttpRequest.darttemplate
+++ b/tools/dom/templates/html/impl/impl_XMLHttpRequest.darttemplate
@@ -148,7 +148,7 @@
* * Using credentials is only useful for cross-origin requests.
* * The `Access-Control-Allow-Origin` header of `url` cannot contain a wildcard (*).
* * The `Access-Control-Allow-Credentials` header of `url` must be set to true.
- * * If `Access-Control-Expose-Headers` has not been set to true, only a subset of all the response headers will be returned when calling [getAllRequestHeaders].
+ * * If `Access-Control-Expose-Headers` has not been set to true, only a subset of all the response headers will be returned when calling [getAllResponseHeaders].
*
* The following is equivalent to the [getString] sample above:
*