Version 2.19.0-9.0.dev
Merge commit '09680ec704a94f37da82cec1c4a63125d81f8410' into 'dev'
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 55f8cdd..7438d5d 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -26,6 +26,11 @@
non-final variable.
- fix`use_build_context_synchronously` to handle `await`s in `if` conditions.
+#### `dart:io`
+
+- **Breaking Change** [#49305](https://github.com/dart-lang/sdk/issues/49305):
+ Disallow negative or hexadecimal content-length headers.
+
## 2.18.0
### Language
diff --git a/pkg/analysis_server/lib/src/services/correction/dart/change_to.dart b/pkg/analysis_server/lib/src/services/correction/dart/change_to.dart
index 1a88115..ff8ea9d 100644
--- a/pkg/analysis_server/lib/src/services/correction/dart/change_to.dart
+++ b/pkg/analysis_server/lib/src/services/correction/dart/change_to.dart
@@ -30,8 +30,8 @@
/// Initialize a newly created instance that will propose classes and mixins.
ChangeTo.classOrMixin() : _kind = _ReplacementKind.classOrMixin;
- /// Initialize a newly created instance that will propose formal parameters.
- ChangeTo.formalParameter() : _kind = _ReplacementKind.formalParameter;
+ /// Initialize a newly created instance that will propose fields.
+ ChangeTo.field() : _kind = _ReplacementKind.field;
/// Initialize a newly created instance that will propose functions.
ChangeTo.function() : _kind = _ReplacementKind.function;
@@ -42,6 +42,11 @@
/// Initialize a newly created instance that will propose methods.
ChangeTo.method() : _kind = _ReplacementKind.method;
+ /// Initialize a newly created instance that will propose super formal
+ /// parameters.
+ ChangeTo.superFormalParameter()
+ : _kind = _ReplacementKind.superFormalParameter;
+
@override
List<Object> get fixArguments => [_proposedName];
@@ -58,14 +63,16 @@
await _proposeAnnotation(builder);
} else if (_kind == _ReplacementKind.classOrMixin) {
await _proposeClassOrMixin(builder, node);
- } else if (_kind == _ReplacementKind.formalParameter) {
- await _proposeFormalParameter(builder);
+ } else if (_kind == _ReplacementKind.field) {
+ await _proposeField(builder);
} else if (_kind == _ReplacementKind.function) {
await _proposeFunction(builder);
} else if (_kind == _ReplacementKind.getterOrSetter) {
await _proposeGetterOrSetter(builder);
} else if (_kind == _ReplacementKind.method) {
await _proposeMethod(builder);
+ } else if (_kind == _ReplacementKind.superFormalParameter) {
+ await _proposeSuperFormalParameter(builder);
}
}
@@ -123,76 +130,69 @@
}
}
- Future<void> _proposeClassOrMixinMember(ChangeBuilder builder,
- Expression? target, _ElementPredicate predicate) async {
- final node = this.node;
+ Future<void> _proposeClassOrMixinMember(
+ ChangeBuilder builder,
+ SimpleIdentifier node,
+ Expression? target,
+ _ElementPredicate predicate) async {
var targetIdentifierElement =
target is Identifier ? target.staticElement : null;
- if (node is SimpleIdentifier) {
- var finder = _ClosestElementFinder(node.name, predicate);
- // unqualified invocation
- if (target == null) {
- var clazz = node.thisOrAncestorOfType<ClassDeclaration>();
- if (clazz != null) {
- var classElement = clazz.declaredElement!;
- _updateFinderWithClassMembers(finder, classElement);
- }
- } else if (target is ExtensionOverride) {
- _updateFinderWithExtensionMembers(finder, target.staticElement);
- } else if (targetIdentifierElement is ExtensionElement) {
- _updateFinderWithExtensionMembers(finder, targetIdentifierElement);
- } else {
- var classElement = getTargetClassElement(target);
- if (classElement != null) {
- _updateFinderWithClassMembers(finder, classElement);
- }
+ var finder = _ClosestElementFinder(node.name, predicate);
+ // unqualified invocation
+ if (target == null) {
+ var clazz = node.thisOrAncestorOfType<ClassDeclaration>();
+ if (clazz != null) {
+ var classElement = clazz.declaredElement!;
+ _updateFinderWithClassMembers(finder, classElement);
}
- // if we have close enough element, suggest to use it
- await _suggest(builder, node, finder._element?.displayName);
+ } else if (target is ExtensionOverride) {
+ _updateFinderWithExtensionMembers(finder, target.staticElement);
+ } else if (targetIdentifierElement is ExtensionElement) {
+ _updateFinderWithExtensionMembers(finder, targetIdentifierElement);
+ } else {
+ var classElement = getTargetClassElement(target);
+ if (classElement != null) {
+ _updateFinderWithClassMembers(finder, classElement);
+ }
}
+ // if we have close enough element, suggest to use it
+ await _suggest(builder, node, finder._element?.displayName);
}
- Future<void> _proposeFormalParameter(ChangeBuilder builder) async {
- var parent = node.parent;
- if (parent is! SuperFormalParameter) return;
+ Future<void> _proposeField(ChangeBuilder builder) async {
+ final node = this.node;
+ if (node is! FieldFormalParameter) return;
+ var exclusions = <String>{};
var constructorDeclaration =
- parent.thisOrAncestorOfType<ConstructorDeclaration>();
- if (constructorDeclaration == null) return;
-
- var formalParameters = constructorDeclaration.parameters.parameters
- .whereType<DefaultFormalParameter>();
-
- var finder =
- _ClosestElementFinder(parent.identifier.name, (Element e) => true);
-
- var superInvocation = constructorDeclaration.initializers.lastOrNull;
-
- if (superInvocation is SuperConstructorInvocation) {
- var staticElement = superInvocation.staticElement;
- if (staticElement == null) return;
-
- var list = _formalParameterSuggestions(staticElement, formalParameters);
- finder._updateList(list);
- } else {
- var targetClassNode = parent.thisOrAncestorOfType<ClassDeclaration>();
- if (targetClassNode == null) return;
-
- var targetClassElement = targetClassNode.declaredElement!;
- var superType = targetClassElement.supertype;
- if (superType == null) return;
-
- for (var constructor in superType.constructors) {
- if (constructor.name.isEmpty) {
- var list = _formalParameterSuggestions(constructor, formalParameters);
- finder._updateList(list);
- break;
+ node.thisOrAncestorOfType<ConstructorDeclaration>();
+ var initializers = constructorDeclaration?.initializers;
+ if (initializers != null) {
+ for (var initializer in initializers) {
+ if (initializer is ConstructorFieldInitializer) {
+ exclusions.add(initializer.fieldName.name);
+ }
+ }
+ }
+ var formalParameterList = node.thisOrAncestorOfType<FormalParameterList>();
+ if (formalParameterList != null) {
+ for (var parameter in formalParameterList.parameters) {
+ var name = parameter.identifier?.name;
+ if (name != null) {
+ exclusions.add(name);
}
}
}
- // If we have a close enough element, suggest to use it.
- await _suggest(builder, node, finder._element?.name);
+ var type = node.type?.type;
+ await _proposeClassOrMixinMember(builder, node.identifier, null,
+ (Element element) {
+ return element is FieldElement &&
+ !exclusions.contains(element.name) &&
+ !element.isSynthetic &&
+ !element.isExternal &&
+ (type == null || typeSystem.isAssignableTo(type, element.type));
+ });
}
Future<void> _proposeFunction(ChangeBuilder builder) async {
@@ -245,7 +245,8 @@
// find getter or setter
var wantGetter = node.inGetterContext();
var wantSetter = node.inSetterContext();
- await _proposeClassOrMixinMember(builder, target, (Element element) {
+ await _proposeClassOrMixinMember(builder, node, target,
+ (Element element) {
if (element is PropertyAccessorElement) {
return wantGetter && element.isGetter ||
wantSetter && element.isSetter;
@@ -259,13 +260,57 @@
}
Future<void> _proposeMethod(ChangeBuilder builder) async {
+ final node = this.node;
var parent = node.parent;
- if (parent is MethodInvocation) {
- await _proposeClassOrMixinMember(builder, parent.realTarget,
+ if (parent is MethodInvocation && node is SimpleIdentifier) {
+ await _proposeClassOrMixinMember(builder, node, parent.realTarget,
(Element element) => element is MethodElement && !element.isOperator);
}
}
+ Future<void> _proposeSuperFormalParameter(ChangeBuilder builder) async {
+ var parent = node.parent;
+ if (parent is! SuperFormalParameter) return;
+
+ var constructorDeclaration =
+ parent.thisOrAncestorOfType<ConstructorDeclaration>();
+ if (constructorDeclaration == null) return;
+
+ var formalParameters = constructorDeclaration.parameters.parameters
+ .whereType<DefaultFormalParameter>();
+
+ var finder =
+ _ClosestElementFinder(parent.identifier.name, (Element e) => true);
+
+ var superInvocation = constructorDeclaration.initializers.lastOrNull;
+
+ if (superInvocation is SuperConstructorInvocation) {
+ var staticElement = superInvocation.staticElement;
+ if (staticElement == null) return;
+
+ var list = _formalParameterSuggestions(staticElement, formalParameters);
+ finder._updateList(list);
+ } else {
+ var targetClassNode = parent.thisOrAncestorOfType<ClassDeclaration>();
+ if (targetClassNode == null) return;
+
+ var targetClassElement = targetClassNode.declaredElement!;
+ var superType = targetClassElement.supertype;
+ if (superType == null) return;
+
+ for (var constructor in superType.constructors) {
+ if (constructor.name.isEmpty) {
+ var list = _formalParameterSuggestions(constructor, formalParameters);
+ finder._updateList(list);
+ break;
+ }
+ }
+ }
+
+ // If we have a close enough element, suggest to use it.
+ await _suggest(builder, node, finder._element?.name);
+ }
+
Future<void> _suggest(
ChangeBuilder builder, AstNode node, String? name) async {
if (name != null) {
@@ -333,8 +378,9 @@
enum _ReplacementKind {
annotation,
classOrMixin,
- formalParameter,
+ field,
function,
getterOrSetter,
- method
+ method,
+ superFormalParameter,
}
diff --git a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
index c3cc63d..57a79eb 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
@@ -960,6 +960,7 @@
CreateClass.new,
],
CompileTimeErrorCode.INITIALIZING_FORMAL_FOR_NON_EXISTENT_FIELD: [
+ ChangeTo.field,
CreateField.new,
],
CompileTimeErrorCode.INSTANCE_ACCESS_TO_STATIC_MEMBER: [
@@ -1070,7 +1071,7 @@
ReplaceReturnType.new,
],
CompileTimeErrorCode.SUPER_FORMAL_PARAMETER_WITHOUT_ASSOCIATED_NAMED: [
- ChangeTo.formalParameter,
+ ChangeTo.superFormalParameter,
],
CompileTimeErrorCode.SWITCH_CASE_COMPLETES_NORMALLY: [
AddSwitchCaseBreak.new,
diff --git a/pkg/analysis_server/test/src/services/correction/fix/change_to_test.dart b/pkg/analysis_server/test/src/services/correction/fix/change_to_test.dart
index c652290..0f5c01d 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/change_to_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/change_to_test.dart
@@ -194,6 +194,78 @@
''');
}
+ Future<void> test_fieldFormalParameter_external() async {
+ await resolveTestCode('''
+class C {
+ external int one;
+ C(this.oen);
+}
+''');
+ await assertNoFix();
+ }
+
+ Future<void> test_fieldFormalParameter_getter() async {
+ await resolveTestCode('''
+class C {
+ int get one => 1;
+ C(this.oen);
+}
+''');
+ await assertNoFix();
+ }
+
+ Future<void> test_fieldFormalParameter_initializer() async {
+ await resolveTestCode('''
+class C {
+ int one;
+ C(this.oen): one = 1;
+}
+''');
+ await assertNoFix();
+ }
+
+ Future<void> test_fieldFormalParameter_used() async {
+ await resolveTestCode('''
+class C {
+ int one;
+ C(this.one, this.oen);
+}
+''');
+ await assertNoFix();
+ }
+
+ Future<void> test_fieldFormalParameter_withoutType() async {
+ await resolveTestCode('''
+class C {
+ var one;
+ C(this.oen);
+}
+''');
+ await assertHasFix('''
+class C {
+ var one;
+ C(this.one);
+}
+''');
+ }
+
+ Future<void> test_fieldFormalParameter_withType() async {
+ await resolveTestCode('''
+class C {
+ int one = 1;
+ var done = '';
+ C(String this.on);
+}
+''');
+ await assertHasFix('''
+class C {
+ int one = 1;
+ var done = '';
+ C(String this.done);
+}
+''');
+ }
+
Future<void> test_function_fromImport() async {
await resolveTestCode('''
void f() {
diff --git a/pkg/analyzer/lib/src/summary2/top_level_inference.dart b/pkg/analyzer/lib/src/summary2/top_level_inference.dart
index d6be12e..d9e2f98 100644
--- a/pkg/analyzer/lib/src/summary2/top_level_inference.dart
+++ b/pkg/analyzer/lib/src/summary2/top_level_inference.dart
@@ -47,7 +47,7 @@
unit.extensions.forEach(_resolveExtensionFields);
unit.mixins.forEach(_resolveClassFields);
- _scope = builder.element.scope;
+ _scope = unit.enclosingElement2.scope;
unit.topLevelVariables.forEach(_resolveVariable);
}
}
diff --git a/pkg/analyzer/test/src/summary/elements_test.dart b/pkg/analyzer/test/src/summary/elements_test.dart
index 195bceb..6742fe3 100644
--- a/pkg/analyzer/test/src/summary/elements_test.dart
+++ b/pkg/analyzer/test/src/summary/elements_test.dart
@@ -78,6 +78,173 @@
''');
}
+ test_augmentation_class_constructor_superConstructor_generic_named() async {
+ newFile('$testPackageLibPath/a.dart', r'''
+library augment 'test.dart';
+class B extends A<int> {
+ B() : super.named(0);
+}
+''');
+ var library = await buildLibrary('''
+import augment 'a.dart';
+class A<T> {
+ A.named(T a);
+}
+''');
+ checkElementText(library, r'''
+library
+ augmentationImports
+ package:test/a.dart
+ definingUnit
+ classes
+ class B @35
+ supertype: A<int>
+ constructors
+ @56
+ superConstructor: ConstructorMember
+ base: self::@class::A::@constructor::named
+ substitution: {T: int}
+ definingUnit
+ classes
+ class A @31
+ typeParameters
+ covariant T @33
+ defaultType: dynamic
+ constructors
+ named @42
+ periodOffset: 41
+ nameEnd: 47
+ parameters
+ requiredPositional a @50
+ type: T
+''');
+ }
+
+ test_augmentation_class_constructor_superConstructor_notGeneric_named() async {
+ newFile('$testPackageLibPath/a.dart', r'''
+library augment 'test.dart';
+class B extends A {
+ B() : super.named();
+}
+''');
+ var library = await buildLibrary('''
+import augment 'a.dart';
+class A {
+ A.named();
+}
+''');
+ checkElementText(library, r'''
+library
+ augmentationImports
+ package:test/a.dart
+ definingUnit
+ classes
+ class B @35
+ supertype: A
+ constructors
+ @51
+ superConstructor: self::@class::A::@constructor::named
+ definingUnit
+ classes
+ class A @31
+ constructors
+ named @39
+ periodOffset: 38
+ nameEnd: 44
+''');
+ }
+
+ test_augmentation_class_constructor_superConstructor_notGeneric_unnamed_explicit() async {
+ newFile('$testPackageLibPath/a.dart', r'''
+library augment 'test.dart';
+class B extends A {
+ B() : super();
+}
+''');
+ var library = await buildLibrary('''
+import augment 'a.dart';
+class A {}
+''');
+ checkElementText(library, r'''
+library
+ augmentationImports
+ package:test/a.dart
+ definingUnit
+ classes
+ class B @35
+ supertype: A
+ constructors
+ @51
+ superConstructor: self::@class::A::@constructor::•
+ definingUnit
+ classes
+ class A @31
+ constructors
+ synthetic @-1
+''');
+ }
+
+ test_augmentation_class_notSimplyBounded_circularity_via_typedef() async {
+ // C's type parameter T is not simply bounded because its bound, F, expands
+ // to `dynamic F(C)`, which refers to C.
+ newFile('$testPackageLibPath/a.dart', r'''
+library augment 'test.dart';
+class C<T extends F> {}
+''');
+ var library = await buildLibrary('''
+import augment 'a.dart';
+typedef F(C value);
+''');
+ checkElementText(library, r'''
+library
+ augmentationImports
+ package:test/a.dart
+ definingUnit
+ classes
+ notSimplyBounded class C @35
+ typeParameters
+ covariant T @37
+ bound: dynamic
+ defaultType: dynamic
+ constructors
+ synthetic @-1
+ definingUnit
+ typeAliases
+ functionTypeAliasBased notSimplyBounded F @33
+ aliasedType: dynamic Function(C<dynamic>)
+ aliasedElement: GenericFunctionTypeElement
+ parameters
+ requiredPositional value @37
+ type: C<dynamic>
+ returnType: dynamic
+''');
+ }
+
+ test_augmentation_class_notSimplyBounded_self() async {
+ newFile('$testPackageLibPath/a.dart', r'''
+library augment 'test.dart';
+class C<T extends C> {}
+''');
+ var library = await buildLibrary('''
+import augment 'a.dart';
+''');
+ checkElementText(library, r'''
+library
+ augmentationImports
+ package:test/a.dart
+ definingUnit
+ classes
+ notSimplyBounded class C @35
+ typeParameters
+ covariant T @37
+ bound: C<dynamic>
+ defaultType: dynamic
+ constructors
+ synthetic @-1
+ definingUnit
+''');
+ }
+
test_augmentation_documented() async {
newFile('$testPackageLibPath/a.dart', r'''
/// My documentation.
@@ -96,6 +263,138 @@
''');
}
+ test_augmentation_importScope_constant() async {
+ newFile('$testPackageLibPath/a.dart', r'''
+final a = 0;
+''');
+
+ newFile('$testPackageLibPath/b.dart', r'''
+library augment 'test.dart';
+import 'a.dart';
+const b = a;
+''');
+
+ final library = await buildLibrary(r'''
+import augment 'b.dart';
+''');
+
+ checkElementText(library, r'''
+library
+ augmentationImports
+ package:test/b.dart
+ imports
+ package:test/a.dart
+ definingUnit
+ topLevelVariables
+ static const b @52
+ type: int
+ constantInitializer
+ SimpleIdentifier
+ token: a @56
+ staticElement: package:test/a.dart::@getter::a
+ staticType: int
+ accessors
+ synthetic static get b @-1
+ returnType: int
+ definingUnit
+''');
+ }
+
+ test_augmentation_importScope_constant_field() async {
+ newFile('$testPackageLibPath/a.dart', r'''
+class A {
+ static const a = 0;
+}
+''');
+
+ newFile('$testPackageLibPath/b.dart', r'''
+library augment 'test.dart';
+import 'a.dart';
+const b = A.a;
+''');
+
+ final library = await buildLibrary(r'''
+import augment 'b.dart';
+''');
+
+ checkElementText(library, r'''
+library
+ augmentationImports
+ package:test/b.dart
+ imports
+ package:test/a.dart
+ definingUnit
+ topLevelVariables
+ static const b @52
+ type: int
+ constantInitializer
+ PrefixedIdentifier
+ prefix: SimpleIdentifier
+ token: A @56
+ staticElement: package:test/a.dart::@class::A
+ staticType: null
+ period: . @57
+ identifier: SimpleIdentifier
+ token: a @58
+ staticElement: package:test/a.dart::@class::A::@getter::a
+ staticType: int
+ staticElement: package:test/a.dart::@class::A::@getter::a
+ staticType: int
+ accessors
+ synthetic static get b @-1
+ returnType: int
+ definingUnit
+''');
+ }
+
+ test_augmentation_importScope_constant_instanceCreation() async {
+ newFile('$testPackageLibPath/a.dart', r'''
+class A {
+ const A {};
+}
+''');
+
+ newFile('$testPackageLibPath/b.dart', r'''
+library augment 'test.dart';
+import 'a.dart';
+const a = A();
+''');
+
+ final library = await buildLibrary(r'''
+import augment 'b.dart';
+''');
+
+ checkElementText(library, r'''
+library
+ augmentationImports
+ package:test/b.dart
+ imports
+ package:test/a.dart
+ definingUnit
+ topLevelVariables
+ static const a @52
+ type: A
+ constantInitializer
+ InstanceCreationExpression
+ constructorName: ConstructorName
+ type: NamedType
+ name: SimpleIdentifier
+ token: A @56
+ staticElement: package:test/a.dart::@class::A
+ staticType: null
+ type: A
+ staticElement: package:test/a.dart::@class::A::@constructor::•
+ argumentList: ArgumentList
+ leftParenthesis: ( @57
+ rightParenthesis: ) @58
+ staticType: A
+ accessors
+ synthetic static get a @-1
+ returnType: A
+ definingUnit
+''');
+ }
+
test_augmentation_importScope_topInference() async {
newFile('$testPackageLibPath/a.dart', r'''
final a = 0;
diff --git a/pkg/compiler/lib/src/dump_info.dart b/pkg/compiler/lib/src/dump_info.dart
index e5d7229..bc9c67a 100644
--- a/pkg/compiler/lib/src/dump_info.dart
+++ b/pkg/compiler/lib/src/dump_info.dart
@@ -14,6 +14,7 @@
import 'package:dart2js_info/json_info_codec.dart';
import 'package:dart2js_info/binary_serialization.dart' as dump_info;
import 'package:kernel/ast.dart' as ir;
+import 'package:kernel/core_types.dart' as ir;
import '../compiler_api.dart' as api;
import 'common.dart';
@@ -184,11 +185,47 @@
return classTypeInfo;
}
+ /// Returns all immediately extended, implemented, or mixed-in types of
+ /// [clazz].
+ List<ClassEntity> getImmediateSupers(ClassEntity clazz) {
+ final superclass =
+ environment.getSuperClass(clazz, skipUnnamedMixinApplications: true);
+ // Ignore 'Object' to reduce overhead.
+ return [
+ if (superclass != null &&
+ superclass != closedWorld.commonElements.objectClass)
+ superclass,
+ ...closedWorld.dartTypes
+ .getInterfaces(clazz)
+ .map((i) => i.element)
+ .where((cls) => cls != null),
+ ];
+ }
+
ClassInfo visitClass(ClassEntity clazz) {
- // Omit class if it is not needed.
- ClassInfo classInfo = ClassInfo(
+ // True if [info] can be safely removed from the output.
+ bool filterClassInfo(ClassInfo info) =>
+ !compiler.backendStrategy.emitterTask.neededClasses.contains(clazz) &&
+ info.fields.isEmpty &&
+ info.functions.isEmpty;
+
+ ClassInfo classInfo = state.entityToInfo[clazz];
+ if (classInfo != null) {
+ return filterClassInfo(classInfo) ? null : classInfo;
+ }
+ final supers = <ClassInfo>[];
+ getImmediateSupers(clazz).forEach((superInterface) {
+ final superclass =
+ environment.lookupClass(superInterface.library, superInterface.name);
+ if (superclass == null) return;
+ final classInfo = visitClass(superclass);
+ if (classInfo == null) return;
+ supers.add(classInfo);
+ });
+ classInfo = ClassInfo(
name: clazz.name,
isAbstract: clazz.isAbstract,
+ supers: supers,
outputUnit: _unitInfoForClass(clazz));
state.entityToInfo[clazz] = classInfo;
@@ -229,9 +266,7 @@
classInfo.size = size;
- if (!compiler.backendStrategy.emitterTask.neededClasses.contains(clazz) &&
- classInfo.fields.isEmpty &&
- classInfo.functions.isEmpty) {
+ if (filterClassInfo(classInfo)) {
return null;
}
@@ -417,11 +452,13 @@
final JClosedWorld closedWorld;
final DumpInfoTask dumpInfoTask;
final state = DumpInfoStateData();
+ final ir.CoreTypes coreTypes;
JElementEnvironment get environment => closedWorld.elementEnvironment;
KernelInfoCollector(
- this.component, this.compiler, this.dumpInfoTask, this.closedWorld);
+ this.component, this.compiler, this.dumpInfoTask, this.closedWorld)
+ : this.coreTypes = ir.CoreTypes(component);
void run() {
// TODO(markzipan): Add CFE constants to `state.info.constants`.
@@ -506,9 +543,29 @@
}
ClassInfo visitClass(ir.Class clazz, {ClassEntity classEntity}) {
- // Omit class if it is not needed.
- ClassInfo classInfo = ClassInfo(
- name: clazz.name, isAbstract: clazz.isAbstract, outputUnit: null);
+ if (state.entityToInfo[classEntity] != null)
+ return state.entityToInfo[classEntity];
+
+ final supers = <ClassInfo>[];
+ clazz.supers.forEach((supertype) {
+ final superclass = supertype.classNode;
+ // Ignore 'Object' to reduce overhead.
+ if (superclass == coreTypes.objectClass) {
+ return;
+ }
+ final superclassLibrary =
+ environment.lookupLibrary(superclass.enclosingLibrary.importUri);
+ final superclassEntity =
+ environment.lookupClass(superclassLibrary, superclass.name);
+ if (superclassEntity == null) return;
+ ClassInfo classInfo =
+ visitClass(superclass, classEntity: superclassEntity);
+ if (classInfo != null) supers.add(classInfo);
+ });
+
+ ClassInfo classInfo = ClassInfo.fromKernel(
+ name: clazz.name, isAbstract: clazz.isAbstract, supers: supers);
+ state.entityToInfo[classEntity] = classInfo;
clazz.members.forEach((ir.Member member) {
final isSetter = member is ir.Procedure && member.isSetter;
@@ -861,6 +918,17 @@
final kClassInfo = kClassInfos.first;
kernelInfo.state.entityToInfo[clazz] = kClassInfo;
+ /// Add synthetically injected superclasses like `Interceptor` and
+ /// `LegacyJavaScriptObject`.
+ final syntheticSuperclass = closedWorld.commonElements
+ .getDefaultSuperclass(clazz, closedWorld.nativeData);
+ if (syntheticSuperclass != closedWorld.commonElements.objectClass) {
+ final classInfo = kernelInfo.state.entityToInfo[syntheticSuperclass];
+ if (classInfo != null) {
+ kClassInfo.supers.add(classInfo);
+ }
+ }
+
int size = dumpInfoTask.sizeOf(clazz);
final disambiguatedMemberName = '$parentName/${clazz.name}';
environment.forEachLocalClassMember(clazz, (member) {
@@ -1647,9 +1715,11 @@
visitClass(ClassInfo info) {
info.functions = filterDeadInfo<FunctionInfo>(info.functions);
info.fields = filterDeadInfo<FieldInfo>(info.fields);
+ info.supers = filterDeadInfo<ClassInfo>(info.supers);
info.functions.forEach(visitFunction);
info.fields.forEach(visitField);
+ info.supers.forEach(visitClass);
}
@override
@@ -1684,6 +1754,7 @@
/// Returns a fully resolved name for [info] for disambiguation.
String fullyResolvedNameForInfo(BasicInfo info) {
+ if (info == null) return '';
var name = info.name;
var currentInfo = info;
while (currentInfo.parent != null) {
diff --git a/pkg/compiler/test/analyses/dart2js_allowed.json b/pkg/compiler/test/analyses/dart2js_allowed.json
index 746d0ef..ad4ddfd 100644
--- a/pkg/compiler/test/analyses/dart2js_allowed.json
+++ b/pkg/compiler/test/analyses/dart2js_allowed.json
@@ -87,7 +87,7 @@
"Dynamic invocation of '[]'.": 12,
"Dynamic invocation of 'compareTo'.": 1,
"Dynamic invocation of 'forEach'.": 2,
- "Dynamic invocation of 'map'.": 2
+ "Dynamic invocation of 'map'.": 3
},
"pkg/dart2js_info/lib/src/binary/sink.dart": {
"Dynamic access of 'index'.": 1
diff --git a/pkg/compiler/test/dump_info/data/closures.dart b/pkg/compiler/test/dump_info/data/closures.dart
index 817e514..f9a7434 100644
--- a/pkg/compiler/test/dump_info/data/closures.dart
+++ b/pkg/compiler/test/dump_info/data/closures.dart
@@ -96,10 +96,11 @@
"function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod2",
"function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod3",
"function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4"
- ]
+ ],
+ "supers": []
}]*/
class Class1<T> {
- /*spec.member: Class1.field:
+ /*member: Class1.field:
closure=[{
"id": "closure/memory:sdk/tests/web/native/main.dart::Class1.field.Class1_field_closure",
"kind": "closure",
@@ -187,70 +188,6 @@
{"id":"function/dart:_rti::findType","mask":null},
{"id":"function/dart:_rti::instanceType","mask":null}]
*/
- /*canary.member: Class1.field:
- closure=[{
- "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.field.Class1_field_closure",
- "kind": "closure",
- "name": "Class1_field_closure",
- "size": 242,
- "outputUnit": "outputUnit/main",
- "parent": "field/memory:sdk/tests/web/native/main.dart::Class1.field",
- "function": "function/memory:sdk/tests/web/native/main.dart::Class1.field.Class1_field_closure.call"
-}],
- function=[{
- "id": "field/memory:sdk/tests/web/native/main.dart::Class1.field",
- "kind": "field",
- "name": "field",
- "size": 318,
- "outputUnit": "outputUnit/main",
- "parent": "class/memory:sdk/tests/web/native/main.dart::Class1",
- "children": [
- "closure/memory:sdk/tests/web/native/main.dart::Class1.field.Class1_field_closure"
- ],
- "inferredType": "[subclass=Closure]",
- "code": "set$field(field) {\n this.field = type$.Type_Function._as(field);\n }",
- "type": "Type Function()"
-}],
- holding=[
- {"id":"field/memory:sdk/tests/web/native/main.dart::Class1.field","mask":null},
- {"id":"function/dart:_js_helper::throwCyclicInit","mask":null},
- {"id":"function/dart:_late_helper::throwLateFieldADI","mask":null},
- {"id":"function/dart:_rti::Rti._bind","mask":null},
- {"id":"function/dart:_rti::Rti._eval","mask":null},
- {"id":"function/dart:_rti::_arrayInstanceType","mask":null},
- {"id":"function/dart:_rti::_asBool","mask":null},
- {"id":"function/dart:_rti::_asBoolQ","mask":null},
- {"id":"function/dart:_rti::_asBoolS","mask":null},
- {"id":"function/dart:_rti::_asDouble","mask":null},
- {"id":"function/dart:_rti::_asDoubleQ","mask":null},
- {"id":"function/dart:_rti::_asDoubleS","mask":null},
- {"id":"function/dart:_rti::_asInt","mask":null},
- {"id":"function/dart:_rti::_asIntQ","mask":null},
- {"id":"function/dart:_rti::_asIntS","mask":null},
- {"id":"function/dart:_rti::_asNum","mask":null},
- {"id":"function/dart:_rti::_asNumQ","mask":null},
- {"id":"function/dart:_rti::_asNumS","mask":null},
- {"id":"function/dart:_rti::_asObject","mask":null},
- {"id":"function/dart:_rti::_asString","mask":null},
- {"id":"function/dart:_rti::_asStringQ","mask":null},
- {"id":"function/dart:_rti::_asStringS","mask":null},
- {"id":"function/dart:_rti::_asTop","mask":null},
- {"id":"function/dart:_rti::_generalAsCheckImplementation","mask":null},
- {"id":"function/dart:_rti::_generalIsTestImplementation","mask":null},
- {"id":"function/dart:_rti::_generalNullableAsCheckImplementation","mask":null},
- {"id":"function/dart:_rti::_generalNullableIsTestImplementation","mask":null},
- {"id":"function/dart:_rti::_installSpecializedAsCheck","mask":null},
- {"id":"function/dart:_rti::_installSpecializedIsTest","mask":null},
- {"id":"function/dart:_rti::_instanceType","mask":null},
- {"id":"function/dart:_rti::_isBool","mask":null},
- {"id":"function/dart:_rti::_isInt","mask":null},
- {"id":"function/dart:_rti::_isNum","mask":null},
- {"id":"function/dart:_rti::_isObject","mask":null},
- {"id":"function/dart:_rti::_isString","mask":null},
- {"id":"function/dart:_rti::_isTop","mask":null},
- {"id":"function/dart:_rti::findType","mask":null},
- {"id":"function/dart:_rti::instanceType","mask":null}]
- */
var field = () => T;
/*member: Class1.funcField:
function=[{
@@ -272,7 +209,7 @@
*/
var funcField;
- /*spec.member: Class1.:
+ /*member: Class1.:
closure=[{
"id": "closure/memory:sdk/tests/web/native/main.dart::Class1.Class1.Class1_closure",
"kind": "closure",
@@ -337,47 +274,6 @@
{"id":"function/memory:sdk/tests/web/native/main.dart::Class1.field.Class1_field_closure.call","mask":null},
{"id":"function/memory:sdk/tests/web/native/main.dart::Class1.field.Class1_field_closure.call","mask":null}]
*/
- /*canary.member: Class1.:
- closure=[{
- "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.Class1.Class1_closure",
- "kind": "closure",
- "name": "Class1_closure",
- "size": 204,
- "outputUnit": "outputUnit/main",
- "parent": "function/memory:sdk/tests/web/native/main.dart::Class1.Class1",
- "function": "function/memory:sdk/tests/web/native/main.dart::Class1.Class1.Class1_closure.call"
-}],
- function=[{
- "id": "function/memory:sdk/tests/web/native/main.dart::Class1.Class1",
- "kind": "function",
- "name": "Class1",
- "size": 355,
- "outputUnit": "outputUnit/main",
- "parent": "class/memory:sdk/tests/web/native/main.dart::Class1",
- "children": [
- "closure/memory:sdk/tests/web/native/main.dart::Class1.Class1.Class1_closure"
- ],
- "modifiers": {
- "static": false,
- "const": false,
- "factory": false,
- "external": false
- },
- "returnType": "dynamic",
- "inferredReturnType": "[exact=Class1]",
- "parameters": [],
- "sideEffects": "SideEffects(reads nothing; writes field)",
- "inlinedCount": 0,
- "code": "Class1$($T) {\n var t1 = new A.Class1(new A.Class1_field_closure($T), null, $T._eval$1(\"Class1<0>\"));\n t1.Class1$0($T);\n return t1;\n }",
- "type": "dynamic Function()",
- "functionKind": 3
-}],
- holding=[
- {"id":"function/dart:_rti::Rti._eval","mask":null},
- {"id":"function/dart:_rti::_setArrayType","mask":null},
- {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.field.Class1_field_closure.call","mask":null},
- {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.field.Class1_field_closure.call","mask":null}]
- */
Class1() {
field = () => T;
}
@@ -443,7 +339,7 @@
"functionKind": 3
}]*/
factory Class1.fact() => new Class1<T>();
- /*spec.member: Class1.fact2:
+ /*member: Class1.fact2:
closure=[{
"id": "closure/memory:sdk/tests/web/native/main.dart::Class1.Class1.fact2.Class1_Class1$fact2_closure",
"kind": "closure",
@@ -508,47 +404,6 @@
{"id":"function/memory:sdk/tests/web/native/main.dart::Class1.Class1.fact2.Class1_Class1$fact2_closure.call","mask":null},
{"id":"function/memory:sdk/tests/web/native/main.dart::Class1.Class1.setFunc","mask":null}]
*/
- /*canary.member: Class1.fact2:
- closure=[{
- "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.Class1.fact2.Class1_Class1$fact2_closure",
- "kind": "closure",
- "name": "Class1_Class1$fact2_closure",
- "size": 314,
- "outputUnit": "outputUnit/main",
- "parent": "function/memory:sdk/tests/web/native/main.dart::Class1.Class1.fact2",
- "function": "function/memory:sdk/tests/web/native/main.dart::Class1.Class1.fact2.Class1_Class1$fact2_closure.call"
-}],
- function=[{
- "id": "function/memory:sdk/tests/web/native/main.dart::Class1.Class1.fact2",
- "kind": "function",
- "name": "Class1.fact2",
- "size": 419,
- "outputUnit": "outputUnit/main",
- "parent": "class/memory:sdk/tests/web/native/main.dart::Class1",
- "children": [
- "closure/memory:sdk/tests/web/native/main.dart::Class1.Class1.fact2.Class1_Class1$fact2_closure"
- ],
- "modifiers": {
- "static": false,
- "const": false,
- "factory": true,
- "external": false
- },
- "returnType": "Class1<#Afree>",
- "inferredReturnType": "[exact=Class1]",
- "parameters": [],
- "sideEffects": "SideEffects(reads nothing; writes nothing)",
- "inlinedCount": 0,
- "code": "Class1_Class1$fact2($T) {\n return A.Class1$setFunc(new A.Class1_Class1$fact2_closure($T), $T);\n }",
- "type": "Class1<#A> Function<#A extends Object?>()",
- "functionKind": 3
-}],
- holding=[
- {"id":"function/dart:_rti::_setArrayType","mask":null},
- {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.Class1.fact2.Class1_Class1$fact2_closure.call","mask":null},
- {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.Class1.fact2.Class1_Class1$fact2_closure.call","mask":null},
- {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.Class1.setFunc","mask":null}]
- */
factory Class1.fact2() => new Class1.setFunc(() => new Set<T>());
/*member: Class1.method1:function=[{
@@ -575,7 +430,7 @@
"functionKind": 2
}]*/
method1() => T;
- /*spec.member: Class1.method2:
+ /*member: Class1.method2:
closure=[{
"id": "closure/memory:sdk/tests/web/native/main.dart::Class1.method2.Class1_method2_closure",
"kind": "closure",
@@ -639,46 +494,6 @@
{"id":"function/memory:sdk/tests/web/native/main.dart::Class1.method2.Class1_method2_closure.call","mask":null},
{"id":"function/memory:sdk/tests/web/native/main.dart::Class1.method2.Class1_method2_closure.call","mask":null}]
*/
- /*canary.member: Class1.method2:
- closure=[{
- "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.method2.Class1_method2_closure",
- "kind": "closure",
- "name": "Class1_method2_closure",
- "size": 262,
- "outputUnit": "outputUnit/main",
- "parent": "function/memory:sdk/tests/web/native/main.dart::Class1.method2",
- "function": "function/memory:sdk/tests/web/native/main.dart::Class1.method2.Class1_method2_closure.call"
-}],
- function=[{
- "id": "function/memory:sdk/tests/web/native/main.dart::Class1.method2",
- "kind": "function",
- "name": "method2",
- "size": 330,
- "outputUnit": "outputUnit/main",
- "parent": "class/memory:sdk/tests/web/native/main.dart::Class1",
- "children": [
- "closure/memory:sdk/tests/web/native/main.dart::Class1.method2.Class1_method2_closure"
- ],
- "modifiers": {
- "static": false,
- "const": false,
- "factory": false,
- "external": false
- },
- "returnType": "dynamic",
- "inferredReturnType": "[subclass=Closure]",
- "parameters": [],
- "sideEffects": "SideEffects(reads nothing; writes nothing)",
- "inlinedCount": 0,
- "code": "method2$0() {\n return new A.Class1_method2_closure(this);\n }",
- "type": "dynamic Function()",
- "functionKind": 2
-}],
- holding=[
- {"id":"function/dart:_rti::_setArrayType","mask":null},
- {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.method2.Class1_method2_closure.call","mask":null},
- {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.method2.Class1_method2_closure.call","mask":null}]
- */
method2() {
return () => T;
}
@@ -707,7 +522,7 @@
"functionKind": 2
}]*/
method3<S>() => S;
- /*spec.member: Class1.method4:
+ /*member: Class1.method4:
closure=[{
"id": "closure/memory:sdk/tests/web/native/main.dart::Class1.method4.Class1_method4_closure",
"kind": "closure",
@@ -771,51 +586,11 @@
{"id":"function/memory:sdk/tests/web/native/main.dart::Class1.method4.Class1_method4_closure.call","mask":null},
{"id":"function/memory:sdk/tests/web/native/main.dart::Class1.method4.Class1_method4_closure.call","mask":null}]
*/
- /*canary.member: Class1.method4:
- closure=[{
- "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.method4.Class1_method4_closure",
- "kind": "closure",
- "name": "Class1_method4_closure",
- "size": 236,
- "outputUnit": "outputUnit/main",
- "parent": "function/memory:sdk/tests/web/native/main.dart::Class1.method4",
- "function": "function/memory:sdk/tests/web/native/main.dart::Class1.method4.Class1_method4_closure.call"
-}],
- function=[{
- "id": "function/memory:sdk/tests/web/native/main.dart::Class1.method4",
- "kind": "function",
- "name": "method4",
- "size": 306,
- "outputUnit": "outputUnit/main",
- "parent": "class/memory:sdk/tests/web/native/main.dart::Class1",
- "children": [
- "closure/memory:sdk/tests/web/native/main.dart::Class1.method4.Class1_method4_closure"
- ],
- "modifiers": {
- "static": false,
- "const": false,
- "factory": false,
- "external": false
- },
- "returnType": "dynamic",
- "inferredReturnType": "[subclass=Closure]",
- "parameters": [],
- "sideEffects": "SideEffects(reads nothing; writes nothing)",
- "inlinedCount": 0,
- "code": "method4$1$0($S) {\n return new A.Class1_method4_closure($S);\n }",
- "type": "dynamic Function<#A extends Object?>()",
- "functionKind": 2
-}],
- holding=[
- {"id":"function/dart:_rti::_setArrayType","mask":null},
- {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.method4.Class1_method4_closure.call","mask":null},
- {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.method4.Class1_method4_closure.call","mask":null}]
- */
method4<S>() {
return () => S;
}
- /*spec.member: Class1.method5:
+ /*member: Class1.method5:
closure=[
{
"id": "closure/memory:sdk/tests/web/native/main.dart::Class1.method5.Class1_method5_local",
@@ -914,58 +689,6 @@
{"id":"function/memory:sdk/tests/web/native/main.dart::Class1.method5.Class1_method5_local.call","mask":null},
{"id":"function/memory:sdk/tests/web/native/main.dart::Class1.method5.Class1_method5_local.call","mask":null}]
*/
- /*canary.member: Class1.method5:
- closure=[
- {
- "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.method5.Class1_method5_local",
- "kind": "closure",
- "name": "Class1_method5_local",
- "size": 287,
- "outputUnit": "outputUnit/main",
- "parent": "function/memory:sdk/tests/web/native/main.dart::Class1.method5",
- "function": "function/memory:sdk/tests/web/native/main.dart::Class1.method5.Class1_method5_local.call"
-},
- {
- "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.method5.Class1_method5_local_closure",
- "kind": "closure",
- "name": "Class1_method5_local_closure",
- "size": 260,
- "outputUnit": "outputUnit/main",
- "parent": "function/memory:sdk/tests/web/native/main.dart::Class1.method5",
- "function": "function/memory:sdk/tests/web/native/main.dart::Class1.method5.Class1_method5_local_closure.call"
-}],
- function=[{
- "id": "function/memory:sdk/tests/web/native/main.dart::Class1.method5",
- "kind": "function",
- "name": "method5",
- "size": 632,
- "outputUnit": "outputUnit/main",
- "parent": "class/memory:sdk/tests/web/native/main.dart::Class1",
- "children": [
- "closure/memory:sdk/tests/web/native/main.dart::Class1.method5.Class1_method5_local",
- "closure/memory:sdk/tests/web/native/main.dart::Class1.method5.Class1_method5_local_closure"
- ],
- "modifiers": {
- "static": false,
- "const": false,
- "factory": false,
- "external": false
- },
- "returnType": "dynamic",
- "inferredReturnType": "[subclass=Closure]",
- "parameters": [],
- "sideEffects": "SideEffects(reads nothing; writes nothing)",
- "inlinedCount": 0,
- "code": "method5$0() {\n return new A.Class1_method5_local().call$1$0(type$.double);\n }",
- "type": "dynamic Function()",
- "functionKind": 2
-}],
- holding=[
- {"id":"function/dart:_rti::_setArrayType","mask":null},
- {"id":"function/dart:_rti::findType","mask":null},
- {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.method5.Class1_method5_local.call","mask":null},
- {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.method5.Class1_method5_local.call","mask":null}]
- */
method5() {
local<S>() {
return () => S;
@@ -974,7 +697,7 @@
return local<double>();
}
- /*spec.member: Class1.method6:
+ /*member: Class1.method6:
closure=[
{
"id": "closure/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6__closure",
@@ -1147,80 +870,6 @@
{"id":"function/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6_local.call","mask":null},
{"id":"function/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6_local.call","mask":null}]
*/
- /*canary.member: Class1.method6:
- closure=[
- {
- "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6__closure",
- "kind": "closure",
- "name": "Class1_method6__closure",
- "size": 415,
- "outputUnit": "outputUnit/main",
- "parent": "function/memory:sdk/tests/web/native/main.dart::Class1.method6",
- "function": "function/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6__closure.call"
-},
- {
- "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6_closure",
- "kind": "closure",
- "name": "Class1_method6_closure",
- "size": 363,
- "outputUnit": "outputUnit/main",
- "parent": "function/memory:sdk/tests/web/native/main.dart::Class1.method6",
- "function": "function/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6_closure.call"
-},
- {
- "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6_local",
- "kind": "closure",
- "name": "Class1_method6_local",
- "size": 316,
- "outputUnit": "outputUnit/main",
- "parent": "function/memory:sdk/tests/web/native/main.dart::Class1.method6",
- "function": "function/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6_local.call"
-},
- {
- "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6_local_closure",
- "kind": "closure",
- "name": "Class1_method6_local_closure",
- "size": 341,
- "outputUnit": "outputUnit/main",
- "parent": "function/memory:sdk/tests/web/native/main.dart::Class1.method6",
- "function": "function/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6_local_closure.call"
-}],
- function=[{
- "id": "function/memory:sdk/tests/web/native/main.dart::Class1.method6",
- "kind": "function",
- "name": "method6",
- "size": 1573,
- "outputUnit": "outputUnit/main",
- "parent": "class/memory:sdk/tests/web/native/main.dart::Class1",
- "children": [
- "closure/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6__closure",
- "closure/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6_closure",
- "closure/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6_local",
- "closure/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6_local_closure"
- ],
- "modifiers": {
- "static": false,
- "const": false,
- "factory": false,
- "external": false
- },
- "returnType": "dynamic",
- "inferredReturnType": "[subclass=Closure]",
- "parameters": [],
- "sideEffects": "SideEffects(reads anything; writes anything)",
- "inlinedCount": 0,
- "code": "method6$1$0($S) {\n return new A.Class1_method6_closure(this, $S).call$1(new A.Class1_method6_local($S).call$1$0(type$.double));\n }",
- "type": "dynamic Function<#A extends Object?>()",
- "functionKind": 2
-}],
- holding=[
- {"id":"function/dart:_rti::_setArrayType","mask":null},
- {"id":"function/dart:_rti::findType","mask":null},
- {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6_closure.call","mask":null},
- {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6_closure.call","mask":null},
- {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6_local.call","mask":null},
- {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6_local.call","mask":null}]
- */
method6<S>() {
local<U>() {
return () => '$S$U';
@@ -1256,7 +905,7 @@
"functionKind": 0
}]*/
static staticMethod1<S>() => S;
- /*spec.member: Class1.staticMethod2:
+ /*member: Class1.staticMethod2:
closure=[{
"id": "closure/memory:sdk/tests/web/native/main.dart::Class1.staticMethod2.Class1_staticMethod2_closure",
"kind": "closure",
@@ -1320,51 +969,11 @@
{"id":"function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod2.Class1_staticMethod2_closure.call","mask":null},
{"id":"function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod2.Class1_staticMethod2_closure.call","mask":null}]
*/
- /*canary.member: Class1.staticMethod2:
- closure=[{
- "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.staticMethod2.Class1_staticMethod2_closure",
- "kind": "closure",
- "name": "Class1_staticMethod2_closure",
- "size": 260,
- "outputUnit": "outputUnit/main",
- "parent": "function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod2",
- "function": "function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod2.Class1_staticMethod2_closure.call"
-}],
- function=[{
- "id": "function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod2",
- "kind": "function",
- "name": "staticMethod2",
- "size": 345,
- "outputUnit": "outputUnit/main",
- "parent": "class/memory:sdk/tests/web/native/main.dart::Class1",
- "children": [
- "closure/memory:sdk/tests/web/native/main.dart::Class1.staticMethod2.Class1_staticMethod2_closure"
- ],
- "modifiers": {
- "static": true,
- "const": false,
- "factory": false,
- "external": false
- },
- "returnType": "dynamic",
- "inferredReturnType": "[subclass=Closure]",
- "parameters": [],
- "sideEffects": "SideEffects(reads nothing; writes nothing)",
- "inlinedCount": 0,
- "code": "Class1_staticMethod2($S) {\n return new A.Class1_staticMethod2_closure($S);\n }",
- "type": "dynamic Function<#A extends Object?>()",
- "functionKind": 0
-}],
- holding=[
- {"id":"function/dart:_rti::_setArrayType","mask":null},
- {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod2.Class1_staticMethod2_closure.call","mask":null},
- {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod2.Class1_staticMethod2_closure.call","mask":null}]
- */
static staticMethod2<S>() {
return () => S;
}
- /*spec.member: Class1.staticMethod3:
+ /*member: Class1.staticMethod3:
closure=[
{
"id": "closure/memory:sdk/tests/web/native/main.dart::Class1.staticMethod3.Class1_staticMethod3_local",
@@ -1463,58 +1072,6 @@
{"id":"function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod3.Class1_staticMethod3_local.call","mask":null},
{"id":"function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod3.Class1_staticMethod3_local.call","mask":null}]
*/
- /*canary.member: Class1.staticMethod3:
- closure=[
- {
- "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.staticMethod3.Class1_staticMethod3_local",
- "kind": "closure",
- "name": "Class1_staticMethod3_local",
- "size": 317,
- "outputUnit": "outputUnit/main",
- "parent": "function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod3",
- "function": "function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod3.Class1_staticMethod3_local.call"
-},
- {
- "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.staticMethod3.Class1_staticMethod3_local_closure",
- "kind": "closure",
- "name": "Class1_staticMethod3_local_closure",
- "size": 284,
- "outputUnit": "outputUnit/main",
- "parent": "function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod3",
- "function": "function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod3.Class1_staticMethod3_local_closure.call"
-}],
- function=[{
- "id": "function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod3",
- "kind": "function",
- "name": "staticMethod3",
- "size": 703,
- "outputUnit": "outputUnit/main",
- "parent": "class/memory:sdk/tests/web/native/main.dart::Class1",
- "children": [
- "closure/memory:sdk/tests/web/native/main.dart::Class1.staticMethod3.Class1_staticMethod3_local",
- "closure/memory:sdk/tests/web/native/main.dart::Class1.staticMethod3.Class1_staticMethod3_local_closure"
- ],
- "modifiers": {
- "static": true,
- "const": false,
- "factory": false,
- "external": false
- },
- "returnType": "dynamic",
- "inferredReturnType": "[subclass=Closure]",
- "parameters": [],
- "sideEffects": "SideEffects(reads nothing; writes nothing)",
- "inlinedCount": 0,
- "code": "Class1_staticMethod3() {\n return new A.Class1_staticMethod3_local().call$1$0(type$.double);\n }",
- "type": "dynamic Function()",
- "functionKind": 0
-}],
- holding=[
- {"id":"function/dart:_rti::_setArrayType","mask":null},
- {"id":"function/dart:_rti::findType","mask":null},
- {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod3.Class1_staticMethod3_local.call","mask":null},
- {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod3.Class1_staticMethod3_local.call","mask":null}]
- */
static staticMethod3() {
local<S>() {
return () => S;
@@ -1523,7 +1080,7 @@
return local<double>();
}
- /*spec.member: Class1.staticMethod4:
+ /*member: Class1.staticMethod4:
closure=[
{
"id": "closure/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4__closure",
@@ -1696,80 +1253,6 @@
{"id":"function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4_local.call","mask":null},
{"id":"function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4_local.call","mask":null}]
*/
- /*canary.member: Class1.staticMethod4:
- closure=[
- {
- "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4__closure",
- "kind": "closure",
- "name": "Class1_staticMethod4__closure",
- "size": 322,
- "outputUnit": "outputUnit/main",
- "parent": "function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4",
- "function": "function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4__closure.call"
-},
- {
- "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4_closure",
- "kind": "closure",
- "name": "Class1_staticMethod4_closure",
- "size": 328,
- "outputUnit": "outputUnit/main",
- "parent": "function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4",
- "function": "function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4_closure.call"
-},
- {
- "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4_local",
- "kind": "closure",
- "name": "Class1_staticMethod4_local",
- "size": 346,
- "outputUnit": "outputUnit/main",
- "parent": "function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4",
- "function": "function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4_local.call"
-},
- {
- "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4_local_closure",
- "kind": "closure",
- "name": "Class1_staticMethod4_local_closure",
- "size": 365,
- "outputUnit": "outputUnit/main",
- "parent": "function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4",
- "function": "function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4_local_closure.call"
-}],
- function=[{
- "id": "function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4",
- "kind": "function",
- "name": "staticMethod4",
- "size": 1514,
- "outputUnit": "outputUnit/main",
- "parent": "class/memory:sdk/tests/web/native/main.dart::Class1",
- "children": [
- "closure/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4__closure",
- "closure/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4_closure",
- "closure/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4_local",
- "closure/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4_local_closure"
- ],
- "modifiers": {
- "static": true,
- "const": false,
- "factory": false,
- "external": false
- },
- "returnType": "dynamic",
- "inferredReturnType": "[subclass=Closure]",
- "parameters": [],
- "sideEffects": "SideEffects(reads anything; writes anything)",
- "inlinedCount": 0,
- "code": "Class1_staticMethod4($S) {\n return new A.Class1_staticMethod4_closure($S).call$1(new A.Class1_staticMethod4_local($S).call$1$0(type$.double));\n }",
- "type": "dynamic Function<#A extends Object?>()",
- "functionKind": 0
-}],
- holding=[
- {"id":"function/dart:_rti::_setArrayType","mask":null},
- {"id":"function/dart:_rti::findType","mask":null},
- {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4_closure.call","mask":null},
- {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4_closure.call","mask":null},
- {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4_local.call","mask":null},
- {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4_local.call","mask":null}]
- */
static staticMethod4<S>() {
local<U>() {
return () => '$S$U';
@@ -1807,7 +1290,7 @@
}]*/
topLevelMethod1<S>() => S;
-/*spec.member: topLevelMethod2:
+/*member: topLevelMethod2:
closure=[{
"id": "closure/memory:sdk/tests/web/native/main.dart::topLevelMethod2.topLevelMethod2_closure",
"kind": "closure",
@@ -1871,51 +1354,11 @@
{"id":"function/memory:sdk/tests/web/native/main.dart::topLevelMethod2.topLevelMethod2_closure.call","mask":null},
{"id":"function/memory:sdk/tests/web/native/main.dart::topLevelMethod2.topLevelMethod2_closure.call","mask":null}]
*/
-/*canary.member: topLevelMethod2:
- closure=[{
- "id": "closure/memory:sdk/tests/web/native/main.dart::topLevelMethod2.topLevelMethod2_closure",
- "kind": "closure",
- "name": "topLevelMethod2_closure",
- "size": 240,
- "outputUnit": "outputUnit/main",
- "parent": "function/memory:sdk/tests/web/native/main.dart::topLevelMethod2",
- "function": "function/memory:sdk/tests/web/native/main.dart::topLevelMethod2.topLevelMethod2_closure.call"
-}],
- function=[{
- "id": "function/memory:sdk/tests/web/native/main.dart::topLevelMethod2",
- "kind": "function",
- "name": "topLevelMethod2",
- "size": 315,
- "outputUnit": "outputUnit/main",
- "parent": "library/memory:sdk/tests/web/native/main.dart::",
- "children": [
- "closure/memory:sdk/tests/web/native/main.dart::topLevelMethod2.topLevelMethod2_closure"
- ],
- "modifiers": {
- "static": false,
- "const": false,
- "factory": false,
- "external": false
- },
- "returnType": "dynamic",
- "inferredReturnType": "[subclass=Closure]",
- "parameters": [],
- "sideEffects": "SideEffects(reads nothing; writes nothing)",
- "inlinedCount": 0,
- "code": "topLevelMethod2($S) {\n return new A.topLevelMethod2_closure($S);\n }",
- "type": "dynamic Function<#A extends Object?>()",
- "functionKind": 0
-}],
- holding=[
- {"id":"function/dart:_rti::_setArrayType","mask":null},
- {"id":"function/memory:sdk/tests/web/native/main.dart::topLevelMethod2.topLevelMethod2_closure.call","mask":null},
- {"id":"function/memory:sdk/tests/web/native/main.dart::topLevelMethod2.topLevelMethod2_closure.call","mask":null}]
-*/
topLevelMethod2<S>() {
return () => S;
}
-/*spec.member: topLevelMethod3:
+/*member: topLevelMethod3:
closure=[
{
"id": "closure/memory:sdk/tests/web/native/main.dart::topLevelMethod3.topLevelMethod3_local",
@@ -2014,58 +1457,6 @@
{"id":"function/memory:sdk/tests/web/native/main.dart::topLevelMethod3.topLevelMethod3_local.call","mask":null},
{"id":"function/memory:sdk/tests/web/native/main.dart::topLevelMethod3.topLevelMethod3_local.call","mask":null}]
*/
-/*canary.member: topLevelMethod3:
- closure=[
- {
- "id": "closure/memory:sdk/tests/web/native/main.dart::topLevelMethod3.topLevelMethod3_local",
- "kind": "closure",
- "name": "topLevelMethod3_local",
- "size": 292,
- "outputUnit": "outputUnit/main",
- "parent": "function/memory:sdk/tests/web/native/main.dart::topLevelMethod3",
- "function": "function/memory:sdk/tests/web/native/main.dart::topLevelMethod3.topLevelMethod3_local.call"
-},
- {
- "id": "closure/memory:sdk/tests/web/native/main.dart::topLevelMethod3.topLevelMethod3_local_closure",
- "kind": "closure",
- "name": "topLevelMethod3_local_closure",
- "size": 264,
- "outputUnit": "outputUnit/main",
- "parent": "function/memory:sdk/tests/web/native/main.dart::topLevelMethod3",
- "function": "function/memory:sdk/tests/web/native/main.dart::topLevelMethod3.topLevelMethod3_local_closure.call"
-}],
- function=[{
- "id": "function/memory:sdk/tests/web/native/main.dart::topLevelMethod3",
- "kind": "function",
- "name": "topLevelMethod3",
- "size": 648,
- "outputUnit": "outputUnit/main",
- "parent": "library/memory:sdk/tests/web/native/main.dart::",
- "children": [
- "closure/memory:sdk/tests/web/native/main.dart::topLevelMethod3.topLevelMethod3_local",
- "closure/memory:sdk/tests/web/native/main.dart::topLevelMethod3.topLevelMethod3_local_closure"
- ],
- "modifiers": {
- "static": false,
- "const": false,
- "factory": false,
- "external": false
- },
- "returnType": "dynamic",
- "inferredReturnType": "[subclass=Closure]",
- "parameters": [],
- "sideEffects": "SideEffects(reads nothing; writes nothing)",
- "inlinedCount": 0,
- "code": "topLevelMethod3() {\n return new A.topLevelMethod3_local().call$1$0(type$.double);\n }",
- "type": "dynamic Function()",
- "functionKind": 0
-}],
- holding=[
- {"id":"function/dart:_rti::_setArrayType","mask":null},
- {"id":"function/dart:_rti::findType","mask":null},
- {"id":"function/memory:sdk/tests/web/native/main.dart::topLevelMethod3.topLevelMethod3_local.call","mask":null},
- {"id":"function/memory:sdk/tests/web/native/main.dart::topLevelMethod3.topLevelMethod3_local.call","mask":null}]
-*/
topLevelMethod3() {
local<S>() {
return () => S;
@@ -2074,7 +1465,7 @@
return local<double>();
}
-/*spec.member: topLevelMethod4:
+/*member: topLevelMethod4:
closure=[
{
"id": "closure/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4__closure",
@@ -2247,80 +1638,6 @@
{"id":"function/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4_local.call","mask":null},
{"id":"function/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4_local.call","mask":null}]
*/
-/*canary.member: topLevelMethod4:
- closure=[
- {
- "id": "closure/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4__closure",
- "kind": "closure",
- "name": "topLevelMethod4__closure",
- "size": 302,
- "outputUnit": "outputUnit/main",
- "parent": "function/memory:sdk/tests/web/native/main.dart::topLevelMethod4",
- "function": "function/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4__closure.call"
-},
- {
- "id": "closure/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4_closure",
- "kind": "closure",
- "name": "topLevelMethod4_closure",
- "size": 303,
- "outputUnit": "outputUnit/main",
- "parent": "function/memory:sdk/tests/web/native/main.dart::topLevelMethod4",
- "function": "function/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4_closure.call"
-},
- {
- "id": "closure/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4_local",
- "kind": "closure",
- "name": "topLevelMethod4_local",
- "size": 321,
- "outputUnit": "outputUnit/main",
- "parent": "function/memory:sdk/tests/web/native/main.dart::topLevelMethod4",
- "function": "function/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4_local.call"
-},
- {
- "id": "closure/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4_local_closure",
- "kind": "closure",
- "name": "topLevelMethod4_local_closure",
- "size": 345,
- "outputUnit": "outputUnit/main",
- "parent": "function/memory:sdk/tests/web/native/main.dart::topLevelMethod4",
- "function": "function/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4_local_closure.call"
-}],
- function=[{
- "id": "function/memory:sdk/tests/web/native/main.dart::topLevelMethod4",
- "kind": "function",
- "name": "topLevelMethod4",
- "size": 1409,
- "outputUnit": "outputUnit/main",
- "parent": "library/memory:sdk/tests/web/native/main.dart::",
- "children": [
- "closure/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4__closure",
- "closure/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4_closure",
- "closure/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4_local",
- "closure/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4_local_closure"
- ],
- "modifiers": {
- "static": false,
- "const": false,
- "factory": false,
- "external": false
- },
- "returnType": "dynamic",
- "inferredReturnType": "[subclass=Closure]",
- "parameters": [],
- "sideEffects": "SideEffects(reads anything; writes anything)",
- "inlinedCount": 0,
- "code": "topLevelMethod4($S) {\n return new A.topLevelMethod4_closure($S).call$1(new A.topLevelMethod4_local($S).call$1$0(type$.double));\n }",
- "type": "dynamic Function<#A extends Object?>()",
- "functionKind": 0
-}],
- holding=[
- {"id":"function/dart:_rti::_setArrayType","mask":null},
- {"id":"function/dart:_rti::findType","mask":null},
- {"id":"function/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4_closure.call","mask":null},
- {"id":"function/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4_closure.call","mask":null},
- {"id":"function/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4_local.call","mask":null},
- {"id":"function/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4_local.call","mask":null}]
-*/
topLevelMethod4<S>() {
local<U>() {
return () => '$S$U';
@@ -2332,7 +1649,7 @@
return local2(local<double>());
}
-/*spec.member: twoLocals:
+/*member: twoLocals:
closure=[
{
"id": "closure/memory:sdk/tests/web/native/main.dart::twoLocals.twoLocals_local1",
@@ -2432,66 +1749,13 @@
{"id":"function/memory:sdk/tests/web/native/main.dart::twoLocals.twoLocals_local2.call","mask":null},
{"id":"function/memory:sdk/tests/web/native/main.dart::twoLocals.twoLocals_local2.call","mask":null}]
*/
-/*canary.member: twoLocals:
- closure=[
- {
- "id": "closure/memory:sdk/tests/web/native/main.dart::twoLocals.twoLocals_local1",
- "kind": "closure",
- "name": "twoLocals_local1",
- "size": 149,
- "outputUnit": "outputUnit/main",
- "parent": "function/memory:sdk/tests/web/native/main.dart::twoLocals",
- "function": "function/memory:sdk/tests/web/native/main.dart::twoLocals.twoLocals_local1.call"
-},
- {
- "id": "closure/memory:sdk/tests/web/native/main.dart::twoLocals.twoLocals_local2",
- "kind": "closure",
- "name": "twoLocals_local2",
- "size": 210,
- "outputUnit": "outputUnit/main",
- "parent": "function/memory:sdk/tests/web/native/main.dart::twoLocals",
- "function": "function/memory:sdk/tests/web/native/main.dart::twoLocals.twoLocals_local2.call"
-}],
- function=[{
- "id": "function/memory:sdk/tests/web/native/main.dart::twoLocals",
- "kind": "function",
- "name": "twoLocals",
- "size": 441,
- "outputUnit": "outputUnit/main",
- "parent": "library/memory:sdk/tests/web/native/main.dart::",
- "children": [
- "closure/memory:sdk/tests/web/native/main.dart::twoLocals.twoLocals_local1",
- "closure/memory:sdk/tests/web/native/main.dart::twoLocals.twoLocals_local2"
- ],
- "modifiers": {
- "static": false,
- "const": false,
- "factory": false,
- "external": false
- },
- "returnType": "dynamic",
- "inferredReturnType": "[subclass=Closure]",
- "parameters": [],
- "sideEffects": "SideEffects(reads nothing; writes nothing)",
- "inlinedCount": 0,
- "code": "twoLocals() {\n return new A.twoLocals_local2(new A.twoLocals_local1());\n }",
- "type": "dynamic Function()",
- "functionKind": 0
-}],
- holding=[
- {"id":"function/dart:_rti::_setArrayType","mask":null},
- {"id":"function/memory:sdk/tests/web/native/main.dart::twoLocals.twoLocals_local1.call","mask":null},
- {"id":"function/memory:sdk/tests/web/native/main.dart::twoLocals.twoLocals_local1.call","mask":null},
- {"id":"function/memory:sdk/tests/web/native/main.dart::twoLocals.twoLocals_local2.call","mask":null},
- {"id":"function/memory:sdk/tests/web/native/main.dart::twoLocals.twoLocals_local2.call","mask":null}]
-*/
dynamic twoLocals() {
local1() {}
local2() => local1();
return local2;
}
-/*spec.member: nested:
+/*member: nested:
closure=[
{
"id": "closure/memory:sdk/tests/web/native/main.dart::nested.nested_nested1",
@@ -2589,57 +1853,6 @@
{"id":"function/memory:sdk/tests/web/native/main.dart::nested.nested_nested1.call","mask":null},
{"id":"function/memory:sdk/tests/web/native/main.dart::nested.nested_nested1.call","mask":null}]
*/
-/*canary.member: nested:
- closure=[
- {
- "id": "closure/memory:sdk/tests/web/native/main.dart::nested.nested_nested1",
- "kind": "closure",
- "name": "nested_nested1",
- "size": 225,
- "outputUnit": "outputUnit/main",
- "parent": "function/memory:sdk/tests/web/native/main.dart::nested",
- "function": "function/memory:sdk/tests/web/native/main.dart::nested.nested_nested1.call"
-},
- {
- "id": "closure/memory:sdk/tests/web/native/main.dart::nested.nested_nested1_nested2",
- "kind": "closure",
- "name": "nested_nested1_nested2",
- "size": 227,
- "outputUnit": "outputUnit/main",
- "parent": "function/memory:sdk/tests/web/native/main.dart::nested",
- "function": "function/memory:sdk/tests/web/native/main.dart::nested.nested_nested1_nested2.call"
-}],
- function=[{
- "id": "function/memory:sdk/tests/web/native/main.dart::nested",
- "kind": "function",
- "name": "nested",
- "size": 568,
- "outputUnit": "outputUnit/main",
- "parent": "library/memory:sdk/tests/web/native/main.dart::",
- "children": [
- "closure/memory:sdk/tests/web/native/main.dart::nested.nested_nested1",
- "closure/memory:sdk/tests/web/native/main.dart::nested.nested_nested1_nested2"
- ],
- "modifiers": {
- "static": false,
- "const": false,
- "factory": false,
- "external": false
- },
- "returnType": "dynamic",
- "inferredReturnType": "[null]",
- "parameters": [],
- "sideEffects": "SideEffects(reads anything; writes anything)",
- "inlinedCount": 0,
- "code": "nested() {\n var t1 = {};\n t1.x = null;\n new A.nested_nested1(t1).call$0();\n t1.x.call$0();\n }",
- "type": "dynamic Function()",
- "functionKind": 0
-}],
- holding=[
- {"id":"function/dart:_rti::_setArrayType","mask":null},
- {"id":"function/memory:sdk/tests/web/native/main.dart::nested.nested_nested1.call","mask":null},
- {"id":"function/memory:sdk/tests/web/native/main.dart::nested.nested_nested1.call","mask":null}]
-*/
dynamic nested() {
dynamic x;
nested1() {
@@ -2651,7 +1864,7 @@
x();
}
-/*spec.member: nested2:
+/*member: nested2:
closure=[
{
"id": "closure/memory:sdk/tests/web/native/main.dart::nested2.nested2_local1",
@@ -2783,68 +1996,6 @@
{"id":"function/memory:sdk/tests/web/native/main.dart::nested2.nested2_local1.call","mask":null},
{"id":"function/memory:sdk/tests/web/native/main.dart::nested2.nested2_local1.call","mask":null}]
*/
-/*canary.member: nested2:
- closure=[
- {
- "id": "closure/memory:sdk/tests/web/native/main.dart::nested2.nested2_local1",
- "kind": "closure",
- "name": "nested2_local1",
- "size": 195,
- "outputUnit": "outputUnit/main",
- "parent": "function/memory:sdk/tests/web/native/main.dart::nested2",
- "function": "function/memory:sdk/tests/web/native/main.dart::nested2.nested2_local1.call"
-},
- {
- "id": "closure/memory:sdk/tests/web/native/main.dart::nested2.nested2_local1__closure",
- "kind": "closure",
- "name": "nested2_local1__closure",
- "size": 193,
- "outputUnit": "outputUnit/main",
- "parent": "function/memory:sdk/tests/web/native/main.dart::nested2",
- "function": "function/memory:sdk/tests/web/native/main.dart::nested2.nested2_local1__closure.call"
-},
- {
- "id": "closure/memory:sdk/tests/web/native/main.dart::nested2.nested2_local1_closure",
- "kind": "closure",
- "name": "nested2_local1_closure",
- "size": 311,
- "outputUnit": "outputUnit/main",
- "parent": "function/memory:sdk/tests/web/native/main.dart::nested2",
- "function": "function/memory:sdk/tests/web/native/main.dart::nested2.nested2_local1_closure.call"
-}],
- function=[{
- "id": "function/memory:sdk/tests/web/native/main.dart::nested2",
- "kind": "function",
- "name": "nested2",
- "size": 764,
- "outputUnit": "outputUnit/main",
- "parent": "library/memory:sdk/tests/web/native/main.dart::",
- "children": [
- "closure/memory:sdk/tests/web/native/main.dart::nested2.nested2_local1",
- "closure/memory:sdk/tests/web/native/main.dart::nested2.nested2_local1__closure",
- "closure/memory:sdk/tests/web/native/main.dart::nested2.nested2_local1_closure"
- ],
- "modifiers": {
- "static": false,
- "const": false,
- "factory": false,
- "external": false
- },
- "returnType": "dynamic",
- "inferredReturnType": "[null]",
- "parameters": [],
- "sideEffects": "SideEffects(reads anything; writes anything)",
- "inlinedCount": 0,
- "code": "nested2() {\n A.print(new A.nested2_local1().call$0());\n }",
- "type": "dynamic Function()",
- "functionKind": 0
-}],
- holding=[
- {"id":"function/dart:_rti::_setArrayType","mask":null},
- {"id":"function/dart:core::print","mask":null},
- {"id":"function/memory:sdk/tests/web/native/main.dart::nested2.nested2_local1.call","mask":null},
- {"id":"function/memory:sdk/tests/web/native/main.dart::nested2.nested2_local1.call","mask":null}]
-*/
dynamic nested2() {
dynamic y;
int local1() {
@@ -2855,7 +2006,7 @@
print(y);
}
-/*spec.member: siblings:
+/*member: siblings:
closure=[
{
"id": "closure/memory:sdk/tests/web/native/main.dart::siblings.siblings_local1",
@@ -2987,68 +2138,6 @@
{"id":"function/memory:sdk/tests/web/native/main.dart::siblings.siblings_local1.call","mask":null},
{"id":"function/memory:sdk/tests/web/native/main.dart::siblings.siblings_local1.call","mask":null}]
*/
-/*canary.member: siblings:
- closure=[
- {
- "id": "closure/memory:sdk/tests/web/native/main.dart::siblings.siblings_local1",
- "kind": "closure",
- "name": "siblings_local1",
- "size": 244,
- "outputUnit": "outputUnit/main",
- "parent": "function/memory:sdk/tests/web/native/main.dart::siblings",
- "function": "function/memory:sdk/tests/web/native/main.dart::siblings.siblings_local1.call"
-},
- {
- "id": "closure/memory:sdk/tests/web/native/main.dart::siblings.siblings_local1_closure",
- "kind": "closure",
- "name": "siblings_local1_closure",
- "size": 193,
- "outputUnit": "outputUnit/main",
- "parent": "function/memory:sdk/tests/web/native/main.dart::siblings",
- "function": "function/memory:sdk/tests/web/native/main.dart::siblings.siblings_local1_closure.call"
-},
- {
- "id": "closure/memory:sdk/tests/web/native/main.dart::siblings.siblings_local1_closure%0",
- "kind": "closure",
- "name": "siblings_local1_closure",
- "size": 197,
- "outputUnit": "outputUnit/main",
- "parent": "function/memory:sdk/tests/web/native/main.dart::siblings",
- "function": "function/memory:sdk/tests/web/native/main.dart::siblings.siblings_local1_closure.call%0"
-}],
- function=[{
- "id": "function/memory:sdk/tests/web/native/main.dart::siblings",
- "kind": "function",
- "name": "siblings",
- "size": 701,
- "outputUnit": "outputUnit/main",
- "parent": "library/memory:sdk/tests/web/native/main.dart::",
- "children": [
- "closure/memory:sdk/tests/web/native/main.dart::siblings.siblings_local1",
- "closure/memory:sdk/tests/web/native/main.dart::siblings.siblings_local1_closure",
- "closure/memory:sdk/tests/web/native/main.dart::siblings.siblings_local1_closure%0"
- ],
- "modifiers": {
- "static": false,
- "const": false,
- "factory": false,
- "external": false
- },
- "returnType": "dynamic",
- "inferredReturnType": "[null]",
- "parameters": [],
- "sideEffects": "SideEffects(reads anything; writes anything)",
- "inlinedCount": 0,
- "code": "siblings() {\n A.print(new A.siblings_local1().call$0());\n }",
- "type": "dynamic Function()",
- "functionKind": 0
-}],
- holding=[
- {"id":"function/dart:_rti::_setArrayType","mask":null},
- {"id":"function/dart:core::print","mask":null},
- {"id":"function/memory:sdk/tests/web/native/main.dart::siblings.siblings_local1.call","mask":null},
- {"id":"function/memory:sdk/tests/web/native/main.dart::siblings.siblings_local1.call","mask":null}]
-*/
dynamic siblings() {
int local1() {
int a = (() => 1)();
diff --git a/pkg/compiler/test/dump_info/data/deferred/main.dart b/pkg/compiler/test/dump_info/data/deferred/main.dart
index 2ab399c..95af0bd 100644
--- a/pkg/compiler/test/dump_info/data/deferred/main.dart
+++ b/pkg/compiler/test/dump_info/data/deferred/main.dart
@@ -121,7 +121,7 @@
import 'lib.dart' deferred as lib;
-/*spec.member: main:
+/*member: main:
closure=[{
"id": "closure/memory:sdk/tests/web/native/main.dart::main.main_closure",
"kind": "closure",
@@ -194,49 +194,6 @@
{"id":"function/memory:sdk/tests/web/native/main.dart::main.main_closure.call","mask":null},
{"id":"function/memory:sdk/tests/web/native/main.dart::main.main_closure.call","mask":null}]
*/
-/*canary.member: main:
- closure=[{
- "id": "closure/memory:sdk/tests/web/native/main.dart::main.main_closure",
- "kind": "closure",
- "name": "main_closure",
- "size": 201,
- "outputUnit": "outputUnit/main",
- "parent": "function/memory:sdk/tests/web/native/main.dart::main",
- "function": "function/memory:sdk/tests/web/native/main.dart::main.main_closure.call"
-}],
- function=[{
- "id": "function/memory:sdk/tests/web/native/main.dart::main",
- "kind": "function",
- "name": "main",
- "size": 301,
- "outputUnit": "outputUnit/main",
- "parent": "library/memory:sdk/tests/web/native/main.dart::",
- "children": [
- "closure/memory:sdk/tests/web/native/main.dart::main.main_closure"
- ],
- "modifiers": {
- "static": false,
- "const": false,
- "factory": false,
- "external": false
- },
- "returnType": "dynamic",
- "inferredReturnType": "[exact=_Future]",
- "parameters": [],
- "sideEffects": "SideEffects(reads anything; writes anything)",
- "inlinedCount": 0,
- "code": "main() {\n return A.loadDeferredLibrary(\"lib\").then$1$1(new A.main_closure(), type$.Null);\n }",
- "type": "dynamic Function()",
- "functionKind": 0
-}],
- holding=[
- {"id":"function/dart:_js_helper::loadDeferredLibrary","mask":null},
- {"id":"function/dart:_rti::_setArrayType","mask":null},
- {"id":"function/dart:_rti::findType","mask":null},
- {"id":"function/dart:async::_Future.then","mask":"[exact=_Future]"},
- {"id":"function/memory:sdk/tests/web/native/main.dart::main.main_closure.call","mask":null},
- {"id":"function/memory:sdk/tests/web/native/main.dart::main.main_closure.call","mask":null}]
-*/
main() => lib.loadLibrary().then((_) {
(lib.funky)();
});
diff --git a/pkg/compiler/test/dump_info/data/deferred_future/lib2.dart b/pkg/compiler/test/dump_info/data/deferred_future/lib2.dart
index bfcfa23..6a9ec09 100644
--- a/pkg/compiler/test/dump_info/data/deferred_future/lib2.dart
+++ b/pkg/compiler/test/dump_info/data/deferred_future/lib2.dart
@@ -27,7 +27,8 @@
},
"children": [
"function/memory:sdk/tests/web/native/lib2.dart::A.method"
- ]
+ ],
+ "supers": []
}]*/
class A {
const A();
diff --git a/pkg/compiler/test/dump_info/data/deferred_future/main.dart b/pkg/compiler/test/dump_info/data/deferred_future/main.dart
index ed843d7..e95b65c 100644
--- a/pkg/compiler/test/dump_info/data/deferred_future/main.dart
+++ b/pkg/compiler/test/dump_info/data/deferred_future/main.dart
@@ -2,130 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-/*spec.library:
- constant=[
- {
- "id": "constant/B.C_A = new A.A();\n",
- "kind": "constant",
- "name": "",
- "size": 19,
- "outputUnit": "outputUnit/1",
- "code": "B.C_A = new A.A();\n"
-},
- {
- "id": "constant/B.C_Deferred = B.C_A;\n",
- "kind": "constant",
- "name": "",
- "size": 22,
- "outputUnit": "outputUnit/1",
- "code": "B.C_Deferred = B.C_A;\n"
-},
- {
- "id": "constant/B.C_JS_CONST = function getTagFallback(o) {\n var s = Object.prototype.toString.call(o);\n return s.substring(8, s.length - 1);\n};\n",
- "kind": "constant",
- "name": "",
- "size": 131,
- "outputUnit": "outputUnit/main",
- "code": "B.C_JS_CONST = function getTagFallback(o) {\n var s = Object.prototype.toString.call(o);\n return s.substring(8, s.length - 1);\n};\n"
-},
- {
- "id": "constant/B.C__RootZone = new A._RootZone();\n",
- "kind": "constant",
- "name": "",
- "size": 35,
- "outputUnit": "outputUnit/main",
- "code": "B.C__RootZone = new A._RootZone();\n"
-},
- {
- "id": "constant/B.C__StringStackTrace = new A._StringStackTrace();\n",
- "kind": "constant",
- "name": "",
- "size": 51,
- "outputUnit": "outputUnit/main",
- "code": "B.C__StringStackTrace = new A._StringStackTrace();\n"
-},
- {
- "id": "constant/B.Interceptor_methods = J.Interceptor.prototype;\n",
- "kind": "constant",
- "name": "",
- "size": 49,
- "outputUnit": "outputUnit/main",
- "code": "B.Interceptor_methods = J.Interceptor.prototype;\n"
-},
- {
- "id": "constant/B.JSArray_methods = J.JSArray.prototype;\n",
- "kind": "constant",
- "name": "",
- "size": 41,
- "outputUnit": "outputUnit/main",
- "code": "B.JSArray_methods = J.JSArray.prototype;\n"
-},
- {
- "id": "constant/B.JSInt_methods = J.JSInt.prototype;\n",
- "kind": "constant",
- "name": "",
- "size": 37,
- "outputUnit": "outputUnit/main",
- "code": "B.JSInt_methods = J.JSInt.prototype;\n"
-},
- {
- "id": "constant/B.JSString_methods = J.JSString.prototype;\n",
- "kind": "constant",
- "name": "",
- "size": 43,
- "outputUnit": "outputUnit/main",
- "code": "B.JSString_methods = J.JSString.prototype;\n"
-},
- {
- "id": "constant/B.JavaScriptObject_methods = J.JavaScriptObject.prototype;\n",
- "kind": "constant",
- "name": "",
- "size": 59,
- "outputUnit": "outputUnit/main",
- "code": "B.JavaScriptObject_methods = J.JavaScriptObject.prototype;\n"
-}],
- deferredFiles=[{
- "main.dart": {
- "name": "<unnamed>",
- "imports": {
- "lib1": [
- "out_1.part.js"
- ]
- }
- }
-}],
- dependencies=[{}],
- library=[{
- "id": "library/memory:sdk/tests/web/native/main.dart::",
- "kind": "library",
- "name": "<unnamed>",
- "size": 857,
- "children": [
- "function/memory:sdk/tests/web/native/main.dart::main"
- ],
- "canonicalUri": "memory:sdk/tests/web/native/main.dart"
-}],
- outputUnits=[
- {
- "id": "outputUnit/1",
- "kind": "outputUnit",
- "name": "1",
- "size": 846,
- "filename": "out_1.part.js",
- "imports": [
- "lib1"
- ]
-},
- {
- "id": "outputUnit/main",
- "kind": "outputUnit",
- "name": "main",
- "filename": "out",
- "imports": []
-}]
-*/
-
-/*canary.library:
+/*library:
constant=[
{
"id": "constant/B.C_A = new A.A();\n",
diff --git a/pkg/compiler/test/dump_info/data/js_members.dart b/pkg/compiler/test/dump_info/data/js_members.dart
index 81cdb3e..1b882b7 100644
--- a/pkg/compiler/test/dump_info/data/js_members.dart
+++ b/pkg/compiler/test/dump_info/data/js_members.dart
@@ -166,6 +166,9 @@
"function/memory:sdk/tests/web/native/main.dart::Foo.mixedPositionalArgs",
"function/memory:sdk/tests/web/native/main.dart::Foo.singleArg",
"function/memory:sdk/tests/web/native/main.dart::Foo.singlePositionalArg"
+ ],
+ "supers": [
+ "class/dart:_interceptors::LegacyJavaScriptObject"
]
}]*/
class Foo {
@@ -278,7 +281,10 @@
"modifiers": {
"abstract": false
},
- "children": []
+ "children": [],
+ "supers": [
+ "class/dart:_interceptors::LegacyJavaScriptObject"
+ ]
}]*/
class Bar {
external static singleArg(a);
diff --git a/pkg/compiler/test/dump_info/data/members.dart b/pkg/compiler/test/dump_info/data/members.dart
index 5fa0d76..4bc7922 100644
--- a/pkg/compiler/test/dump_info/data/members.dart
+++ b/pkg/compiler/test/dump_info/data/members.dart
@@ -98,7 +98,8 @@
"function/memory:sdk/tests/web/native/main.dart::C.C._default",
"function/memory:sdk/tests/web/native/main.dart::C.C.create",
"function/memory:sdk/tests/web/native/main.dart::C.compute"
- ]
+ ],
+ "supers": []
}]*/
class C {
/*member: C.value:
@@ -291,7 +292,8 @@
"children": [
"field/memory:sdk/tests/web/native/main.dart::A.a",
"function/memory:sdk/tests/web/native/main.dart::A.A"
- ]
+ ],
+ "supers": []
}],
classType=[{
"id": "classType/memory:sdk/tests/web/native/main.dart::A",
diff --git a/pkg/compiler/test/dump_info/data_new/mixin_with_tearoff_test.dart b/pkg/compiler/test/dump_info/data_new/mixin_with_tearoff_test.dart
index 51ce89b..e769b3f 100644
--- a/pkg/compiler/test/dump_info/data_new/mixin_with_tearoff_test.dart
+++ b/pkg/compiler/test/dump_info/data_new/mixin_with_tearoff_test.dart
@@ -103,7 +103,8 @@
"modifiers": {
"abstract": false
},
- "children": []
+ "children": [],
+ "supers": []
}]*/
class Super<T> {
void method(T t) {}
@@ -121,7 +122,8 @@
},
"children": [
"function/memory:sdk/tests/web/native/main.dart::Mixin.method"
- ]
+ ],
+ "supers": []
}]*/
class Mixin {
/*member: Mixin.method:
@@ -206,6 +208,10 @@
},
"children": [
"function/memory:sdk/tests/web/native/main.dart::Clazz.method"
+ ],
+ "supers": [
+ "class/memory:sdk/tests/web/native/main.dart::Mixin",
+ "class/memory:sdk/tests/web/native/main.dart::Super"
]
}]*/
/*member: Clazz.method:
@@ -291,6 +297,9 @@
"children": [
"function/memory:sdk/tests/web/native/main.dart::Subclass.Subclass",
"function/memory:sdk/tests/web/native/main.dart::Subclass.test"
+ ],
+ "supers": [
+ "class/memory:sdk/tests/web/native/main.dart::Clazz"
]
}]*/
/*member: Subclass.:function=[{
diff --git a/pkg/dart2js_info/lib/binary_serialization.dart b/pkg/dart2js_info/lib/binary_serialization.dart
index 0d707ce..ecf2ef7 100644
--- a/pkg/dart2js_info/lib/binary_serialization.dart
+++ b/pkg/dart2js_info/lib/binary_serialization.dart
@@ -117,6 +117,7 @@
sink.writeBool(info.isAbstract);
sink.writeList(info.fields, visitField);
sink.writeList(info.functions, visitFunction);
+ sink.writeList(info.supers, visitClass);
});
}
@@ -387,6 +388,7 @@
info.isAbstract = source.readBool();
info.fields.addAll(source.readList(readField));
info.functions.addAll(source.readList(readFunction));
+ info.supers.addAll(source.readList(readClass));
setParent(BasicInfo child) => child.parent = info;
info.fields.forEach(setParent);
diff --git a/pkg/dart2js_info/lib/info.dart b/pkg/dart2js_info/lib/info.dart
index 509edb0..cfc7242 100644
--- a/pkg/dart2js_info/lib/info.dart
+++ b/pkg/dart2js_info/lib/info.dart
@@ -257,14 +257,19 @@
// but this should be fixed.
List<FieldInfo> fields = <FieldInfo>[];
+ /// Classes in the supertype hierarchy for this class.
+ List<ClassInfo> supers = <ClassInfo>[];
+
ClassInfo(
{required String name,
required this.isAbstract,
+ required this.supers,
OutputUnitInfo? outputUnit,
int size = 0})
: super(InfoKind.clazz, name, outputUnit, size, null);
- ClassInfo.fromKernel({required String name, required this.isAbstract})
+ ClassInfo.fromKernel(
+ {required String name, required this.isAbstract, required this.supers})
: super(InfoKind.clazz, name, null, 0, null);
ClassInfo.internal() : super.internal(InfoKind.clazz);
diff --git a/pkg/dart2js_info/lib/json_info_codec.dart b/pkg/dart2js_info/lib/json_info_codec.dart
index 937ea4d..a969a9d 100644
--- a/pkg/dart2js_info/lib/json_info_codec.dart
+++ b/pkg/dart2js_info/lib/json_info_codec.dart
@@ -113,9 +113,10 @@
result.classes.add(child);
} else if (child is ClassTypeInfo) {
result.classTypes.add(child);
- } else {
- assert(child is TypedefInfo);
+ } else if (child is TypedefInfo) {
result.typedefs.add(child);
+ } else {
+ throw StateError('Invalid LibraryInfo child: $child');
}
}
return result;
@@ -132,11 +133,14 @@
for (var child in json['children'].map((id) => parseId(id))) {
if (child is FunctionInfo) {
result.functions.add(child);
- } else {
- assert(child is FieldInfo);
+ } else if (child is FieldInfo) {
result.fields.add(child);
+ } else {
+ throw StateError('Invalid ClassInfo child: $child');
}
}
+ result.supers.addAll(
+ json['supers'].map<ClassInfo>((id) => parseId(id) as ClassInfo));
return result;
}
@@ -350,6 +354,7 @@
info is LibraryInfo ||
info is ConstantInfo ||
info is OutputUnitInfo ||
+ info is ClassInfo ||
info.parent != null,
"$info");
@@ -510,7 +515,8 @@
// TODO(sigmund): change format, include only when abstract is true.
'modifiers': {'abstract': info.isAbstract},
'children':
- _toSortedSerializedIds([...info.fields, ...info.functions], idFor)
+ _toSortedSerializedIds([...info.fields, ...info.functions], idFor),
+ 'supers': _toSortedSerializedIds(info.supers, idFor)
});
}
diff --git a/pkg/dart2js_info/lib/proto_info_codec.dart b/pkg/dart2js_info/lib/proto_info_codec.dart
index e81cb1a..a8b3435 100644
--- a/pkg/dart2js_info/lib/proto_info_codec.dart
+++ b/pkg/dart2js_info/lib/proto_info_codec.dart
@@ -35,6 +35,7 @@
assert(info is LibraryInfo ||
info is ConstantInfo ||
info is OutputUnitInfo ||
+ info is ClassInfo ||
info.parent != null);
int id;
diff --git a/pkg/dart2js_info/test/hello_world/hello_world.js.info.json b/pkg/dart2js_info/test/hello_world/hello_world.js.info.json
index c0bf81b..9e3fa09 100644
--- a/pkg/dart2js_info/test/hello_world/hello_world.js.info.json
+++ b/pkg/dart2js_info/test/hello_world/hello_world.js.info.json
@@ -278,7 +278,8 @@
},
"children": [
"field/dart:_foreign_helper::JS_CONST.code"
- ]
+ ],
+ "supers": []
},
"dart:_interceptors::ArrayIterator": {
"id": "class/dart:_interceptors::ArrayIterator",
@@ -298,7 +299,8 @@
"function/dart:_interceptors::ArrayIterator.ArrayIterator",
"function/dart:_interceptors::ArrayIterator.current",
"function/dart:_interceptors::ArrayIterator.moveNext"
- ]
+ ],
+ "supers": []
},
"dart:_interceptors::Interceptor": {
"id": "class/dart:_interceptors::Interceptor",
@@ -312,7 +314,8 @@
},
"children": [
"function/dart:_interceptors::Interceptor.toString"
- ]
+ ],
+ "supers": []
},
"dart:_interceptors::JSArray": {
"id": "class/dart:_interceptors::JSArray",
@@ -333,6 +336,9 @@
"function/dart:_interceptors::JSArray.length",
"function/dart:_interceptors::JSArray.markFixedList",
"function/dart:_interceptors::JSArray.toString"
+ ],
+ "supers": [
+ "class/dart:_interceptors::Interceptor"
]
},
"dart:_interceptors::JSBool": {
@@ -347,6 +353,10 @@
},
"children": [
"function/dart:_interceptors::JSBool.toString"
+ ],
+ "supers": [
+ "class/dart:_interceptors::Interceptor",
+ "class/dart:core::bool"
]
},
"dart:_interceptors::JSInt": {
@@ -359,7 +369,10 @@
"modifiers": {
"abstract": false
},
- "children": []
+ "children": [],
+ "supers": [
+ "class/dart:_interceptors::JSNumber"
+ ]
},
"dart:_interceptors::JSNull": {
"id": "class/dart:_interceptors::JSNull",
@@ -373,6 +386,10 @@
},
"children": [
"function/dart:_interceptors::JSNull.toString"
+ ],
+ "supers": [
+ "class/dart:_interceptors::Interceptor",
+ "class/dart:core::Null"
]
},
"dart:_interceptors::JSNumNotInt": {
@@ -385,7 +402,10 @@
"modifiers": {
"abstract": false
},
- "children": []
+ "children": [],
+ "supers": [
+ "class/dart:_interceptors::JSNumber"
+ ]
},
"dart:_interceptors::JSNumber": {
"id": "class/dart:_interceptors::JSNumber",
@@ -399,6 +419,9 @@
},
"children": [
"function/dart:_interceptors::JSNumber.toString"
+ ],
+ "supers": [
+ "class/dart:_interceptors::Interceptor"
]
},
"dart:_interceptors::JSString": {
@@ -416,6 +439,9 @@
"function/dart:_interceptors::JSString.isEmpty",
"function/dart:_interceptors::JSString.length",
"function/dart:_interceptors::JSString.toString"
+ ],
+ "supers": [
+ "class/dart:_interceptors::Interceptor"
]
},
"dart:_interceptors::JSUnmodifiableArray": {
@@ -428,7 +454,10 @@
"modifiers": {
"abstract": false
},
- "children": []
+ "children": [],
+ "supers": [
+ "class/dart:_interceptors::JSArray"
+ ]
},
"dart:_interceptors::JavaScriptObject": {
"id": "class/dart:_interceptors::JavaScriptObject",
@@ -440,7 +469,10 @@
"modifiers": {
"abstract": false
},
- "children": []
+ "children": [],
+ "supers": [
+ "class/dart:_interceptors::Interceptor"
+ ]
},
"dart:_internal::LateError": {
"id": "class/dart:_internal::LateError",
@@ -456,6 +488,9 @@
"field/dart:_internal::LateError._message",
"function/dart:_internal::LateError.LateError.fieldADI",
"function/dart:_internal::LateError.toString"
+ ],
+ "supers": [
+ "class/dart:core::Error"
]
},
"dart:_js_helper::BoundClosure": {
@@ -482,6 +517,9 @@
"function/dart:_js_helper::BoundClosure.receiverFieldName",
"function/dart:_js_helper::BoundClosure.receiverOf",
"function/dart:_js_helper::BoundClosure.toString"
+ ],
+ "supers": [
+ "class/dart:_js_helper::TearOffClosure"
]
},
"dart:_js_helper::Closure": {
@@ -504,7 +542,8 @@
"function/dart:_js_helper::Closure.fromTearOff",
"function/dart:_js_helper::Closure.isCsp",
"function/dart:_js_helper::Closure.toString"
- ]
+ ],
+ "supers": []
},
"dart:_js_helper::Primitives": {
"id": "class/dart:_js_helper::Primitives",
@@ -523,7 +562,8 @@
"function/dart:_js_helper::Primitives.objectToHumanReadableString",
"function/dart:_js_helper::Primitives.objectTypeName",
"function/dart:_js_helper::Primitives.stringConcatUnchecked"
- ]
+ ],
+ "supers": []
},
"dart:_js_helper::RuntimeError": {
"id": "class/dart:_js_helper::RuntimeError",
@@ -539,6 +579,9 @@
"field/dart:_js_helper::RuntimeError.message",
"function/dart:_js_helper::RuntimeError.RuntimeError",
"function/dart:_js_helper::RuntimeError.toString"
+ ],
+ "supers": [
+ "class/dart:core::Error"
]
},
"dart:_js_helper::StaticClosure": {
@@ -554,6 +597,9 @@
"children": [
"function/dart:_js_helper::StaticClosure.StaticClosure",
"function/dart:_js_helper::StaticClosure.toString"
+ ],
+ "supers": [
+ "class/dart:_js_helper::TearOffClosure"
]
},
"dart:_js_helper::TearOffClosure": {
@@ -566,7 +612,10 @@
"modifiers": {
"abstract": true
},
- "children": []
+ "children": [],
+ "supers": [
+ "class/dart:_js_helper::Closure"
+ ]
},
"dart:_js_shared_embedded_names::RtiUniverseFieldNames": {
"id": "class/dart:_js_shared_embedded_names::RtiUniverseFieldNames",
@@ -584,7 +633,8 @@
"field/dart:_js_shared_embedded_names::RtiUniverseFieldNames.sharedEmptyArray",
"field/dart:_js_shared_embedded_names::RtiUniverseFieldNames.typeParameterVariances",
"field/dart:_js_shared_embedded_names::RtiUniverseFieldNames.typeRules"
- ]
+ ],
+ "supers": []
},
"dart:_recipe_syntax::Recipe": {
"id": "class/dart:_recipe_syntax::Recipe",
@@ -600,7 +650,8 @@
"function/dart:_recipe_syntax::Recipe.digitValue",
"function/dart:_recipe_syntax::Recipe.isDigit",
"function/dart:_recipe_syntax::Recipe.isIdentifierStart"
- ]
+ ],
+ "supers": []
},
"dart:_rti::Rti": {
"id": "class/dart:_rti::Rti",
@@ -666,7 +717,8 @@
"function/dart:_rti::Rti._setRest",
"function/dart:_rti::Rti._setSpecializedTestResource",
"function/dart:_rti::Rti.allocate"
- ]
+ ],
+ "supers": []
},
"dart:_rti::TypeRule": {
"id": "class/dart:_rti::TypeRule",
@@ -681,7 +733,8 @@
"children": [
"function/dart:_rti::TypeRule.lookupSupertype",
"function/dart:_rti::TypeRule.lookupTypeVariable"
- ]
+ ],
+ "supers": []
},
"dart:_rti::_Error": {
"id": "class/dart:_rti::_Error",
@@ -697,6 +750,9 @@
"field/dart:_rti::_Error._message",
"function/dart:_rti::_Error.compose",
"function/dart:_rti::_Error.toString"
+ ],
+ "supers": [
+ "class/dart:core::Error"
]
},
"dart:_rti::_FunctionParameters": {
@@ -721,7 +777,8 @@
"function/dart:_rti::_FunctionParameters._setOptionalPositional",
"function/dart:_rti::_FunctionParameters._setRequiredPositional",
"function/dart:_rti::_FunctionParameters.allocate"
- ]
+ ],
+ "supers": []
},
"dart:_rti::_Parser": {
"id": "class/dart:_rti::_Parser",
@@ -761,7 +818,8 @@
"function/dart:_rti::_Parser.toTypes",
"function/dart:_rti::_Parser.toTypesNamed",
"function/dart:_rti::_Parser.universe"
- ]
+ ],
+ "supers": []
},
"dart:_rti::_Type": {
"id": "class/dart:_rti::_Type",
@@ -775,7 +833,8 @@
},
"children": [
"field/dart:_rti::_Type._rti"
- ]
+ ],
+ "supers": []
},
"dart:_rti::_TypeError": {
"id": "class/dart:_rti::_TypeError",
@@ -790,6 +849,9 @@
"children": [
"function/dart:_rti::_TypeError._TypeError.forType",
"function/dart:_rti::_TypeError._TypeError.fromMessage"
+ ],
+ "supers": [
+ "class/dart:_rti::_Error"
]
},
"dart:_rti::_Universe": {
@@ -865,7 +927,8 @@
"function/dart:_rti::_Universe.sharedEmptyArray",
"function/dart:_rti::_Universe.typeParameterVariances",
"function/dart:_rti::_Universe.typeRules"
- ]
+ ],
+ "supers": []
},
"dart:_rti::_Utils": {
"id": "class/dart:_rti::_Utils",
@@ -903,7 +966,8 @@
"function/dart:_rti::_Utils.objectKeys",
"function/dart:_rti::_Utils.stringLessThan",
"function/dart:_rti::_Utils.substring"
- ]
+ ],
+ "supers": []
},
"dart:collection::IterableBase": {
"id": "class/dart:collection::IterableBase",
@@ -917,7 +981,8 @@
},
"children": [
"function/dart:collection::IterableBase.iterableToFullString"
- ]
+ ],
+ "supers": []
},
"dart:collection::ListBase": {
"id": "class/dart:collection::ListBase",
@@ -931,7 +996,8 @@
},
"children": [
"function/dart:collection::ListBase.listToString"
- ]
+ ],
+ "supers": []
},
"dart:core::ArgumentError": {
"id": "class/dart:core::ArgumentError",
@@ -953,6 +1019,9 @@
"function/dart:core::ArgumentError._errorExplanation",
"function/dart:core::ArgumentError._errorName",
"function/dart:core::ArgumentError.toString"
+ ],
+ "supers": [
+ "class/dart:core::Error"
]
},
"dart:core::AssertionError": {
@@ -969,6 +1038,9 @@
"field/dart:core::AssertionError.message",
"function/dart:core::AssertionError.AssertionError",
"function/dart:core::AssertionError.toString"
+ ],
+ "supers": [
+ "class/dart:core::Error"
]
},
"dart:core::ConcurrentModificationError": {
@@ -985,6 +1057,9 @@
"field/dart:core::ConcurrentModificationError.modifiedObject",
"function/dart:core::ConcurrentModificationError.ConcurrentModificationError",
"function/dart:core::ConcurrentModificationError.toString"
+ ],
+ "supers": [
+ "class/dart:core::Error"
]
},
"dart:core::CyclicInitializationError": {
@@ -1001,6 +1076,9 @@
"field/dart:core::CyclicInitializationError.variableName",
"function/dart:core::CyclicInitializationError.CyclicInitializationError",
"function/dart:core::CyclicInitializationError.toString"
+ ],
+ "supers": [
+ "class/dart:core::Error"
]
},
"dart:core::Error": {
@@ -1017,7 +1095,8 @@
"function/dart:core::Error._objectToString",
"function/dart:core::Error._stringToSafeString",
"function/dart:core::Error.safeToString"
- ]
+ ],
+ "supers": []
},
"dart:core::IndexError": {
"id": "class/dart:core::IndexError",
@@ -1035,6 +1114,10 @@
"function/dart:core::IndexError.IndexError",
"function/dart:core::IndexError._errorExplanation",
"function/dart:core::IndexError._errorName"
+ ],
+ "supers": [
+ "class/dart:core::ArgumentError",
+ "class/dart:core::RangeError"
]
},
"dart:core::Null": {
@@ -1049,7 +1132,8 @@
},
"children": [
"function/dart:core::Null.toString"
- ]
+ ],
+ "supers": []
},
"dart:core::NullThrownError": {
"id": "class/dart:core::NullThrownError",
@@ -1064,6 +1148,9 @@
"children": [
"function/dart:core::NullThrownError.NullThrownError",
"function/dart:core::NullThrownError.toString"
+ ],
+ "supers": [
+ "class/dart:core::Error"
]
},
"dart:core::Object": {
@@ -1078,7 +1165,8 @@
},
"children": [
"function/dart:core::Object.toString"
- ]
+ ],
+ "supers": []
},
"dart:core::RangeError": {
"id": "class/dart:core::RangeError",
@@ -1096,6 +1184,9 @@
"function/dart:core::RangeError.RangeError.value",
"function/dart:core::RangeError._errorExplanation",
"function/dart:core::RangeError._errorName"
+ ],
+ "supers": [
+ "class/dart:core::ArgumentError"
]
},
"dart:core::StateError": {
@@ -1110,6 +1201,9 @@
},
"children": [
"field/dart:core::StateError.message"
+ ],
+ "supers": [
+ "class/dart:core::Error"
]
},
"dart:core::StringBuffer": {
@@ -1132,7 +1226,8 @@
"function/dart:core::StringBuffer.toString",
"function/dart:core::StringBuffer.write",
"function/dart:core::StringBuffer.writeAll"
- ]
+ ],
+ "supers": []
},
"dart:core::UnsupportedError": {
"id": "class/dart:core::UnsupportedError",
@@ -1148,6 +1243,9 @@
"field/dart:core::UnsupportedError.message",
"function/dart:core::UnsupportedError.UnsupportedError",
"function/dart:core::UnsupportedError.toString"
+ ],
+ "supers": [
+ "class/dart:core::Error"
]
},
"dart:core::_Enum": {
@@ -1163,7 +1261,8 @@
"children": [
"field/dart:core::_Enum._name",
"field/dart:core::_Enum.index"
- ]
+ ],
+ "supers": []
},
"dart:core::bool": {
"id": "class/dart:core::bool",
@@ -1177,7 +1276,8 @@
},
"children": [
"function/dart:core::bool.toString"
- ]
+ ],
+ "supers": []
}
},
"classType": {
@@ -28711,7 +28811,7 @@
"id": "outputUnit/main",
"kind": "outputUnit",
"name": "main",
- "size": 90269,
+ "size": 90293,
"filename": "hello_world.js",
"imports": []
}
@@ -28721,12 +28821,12 @@
"dump_minor_version": 1,
"program": {
"entrypoint": "function/hello_world.dart::main",
- "size": 90269,
- "ramUsage": "194.188 MB",
+ "size": 90293,
+ "ramUsage": "195.313 MB",
"dart2jsVersion": null,
- "compilationMoment": "2022-07-08 12:57:36.142141",
- "compilationDuration": 1321045,
- "toJsonDuration": 1000,
+ "compilationMoment": "2022-07-14 17:35:15.006337",
+ "compilationDuration": 1289072,
+ "toJsonDuration": 2000,
"dumpInfoDuration": 0,
"noSuchMethodEnabled": false,
"isRuntimeTypeUsed": false,
diff --git a/pkg/dart2js_info/test/hello_world_deferred/hello_world_deferred.js.info.json b/pkg/dart2js_info/test/hello_world_deferred/hello_world_deferred.js.info.json
index f583ac5..063aef8 100644
--- a/pkg/dart2js_info/test/hello_world_deferred/hello_world_deferred.js.info.json
+++ b/pkg/dart2js_info/test/hello_world_deferred/hello_world_deferred.js.info.json
@@ -413,7 +413,8 @@
},
"children": [
"field/dart:_foreign_helper::JS_CONST.code"
- ]
+ ],
+ "supers": []
},
"dart:_interceptors::ArrayIterator": {
"id": "class/dart:_interceptors::ArrayIterator",
@@ -433,7 +434,8 @@
"function/dart:_interceptors::ArrayIterator.ArrayIterator",
"function/dart:_interceptors::ArrayIterator.current",
"function/dart:_interceptors::ArrayIterator.moveNext"
- ]
+ ],
+ "supers": []
},
"dart:_interceptors::Interceptor": {
"id": "class/dart:_interceptors::Interceptor",
@@ -449,7 +451,8 @@
"function/dart:_interceptors::Interceptor.==",
"function/dart:_interceptors::Interceptor.hashCode",
"function/dart:_interceptors::Interceptor.toString"
- ]
+ ],
+ "supers": []
},
"dart:_interceptors::JSArray": {
"id": "class/dart:_interceptors::JSArray",
@@ -481,6 +484,10 @@
"function/dart:_interceptors::JSArray.length",
"function/dart:_interceptors::JSArray.markFixedList",
"function/dart:_interceptors::JSArray.toString"
+ ],
+ "supers": [
+ "class/dart:_interceptors::Interceptor",
+ "class/dart:core::List"
]
},
"dart:_interceptors::JSBool": {
@@ -496,6 +503,10 @@
"children": [
"function/dart:_interceptors::JSBool.hashCode",
"function/dart:_interceptors::JSBool.toString"
+ ],
+ "supers": [
+ "class/dart:_interceptors::Interceptor",
+ "class/dart:core::bool"
]
},
"dart:_interceptors::JSInt": {
@@ -508,7 +519,10 @@
"modifiers": {
"abstract": false
},
- "children": []
+ "children": [],
+ "supers": [
+ "class/dart:_interceptors::JSNumber"
+ ]
},
"dart:_interceptors::JSNull": {
"id": "class/dart:_interceptors::JSNull",
@@ -524,6 +538,10 @@
"function/dart:_interceptors::JSNull.==",
"function/dart:_interceptors::JSNull.hashCode",
"function/dart:_interceptors::JSNull.toString"
+ ],
+ "supers": [
+ "class/dart:_interceptors::Interceptor",
+ "class/dart:core::Null"
]
},
"dart:_interceptors::JSNumNotInt": {
@@ -536,7 +554,10 @@
"modifiers": {
"abstract": false
},
- "children": []
+ "children": [],
+ "supers": [
+ "class/dart:_interceptors::JSNumber"
+ ]
},
"dart:_interceptors::JSNumber": {
"id": "class/dart:_interceptors::JSNumber",
@@ -553,6 +574,9 @@
"function/dart:_interceptors::JSNumber._shrOtherPositive",
"function/dart:_interceptors::JSNumber.hashCode",
"function/dart:_interceptors::JSNumber.toString"
+ ],
+ "supers": [
+ "class/dart:_interceptors::Interceptor"
]
},
"dart:_interceptors::JSString": {
@@ -571,6 +595,9 @@
"function/dart:_interceptors::JSString.isEmpty",
"function/dart:_interceptors::JSString.length",
"function/dart:_interceptors::JSString.toString"
+ ],
+ "supers": [
+ "class/dart:_interceptors::Interceptor"
]
},
"dart:_interceptors::JSUnmodifiableArray": {
@@ -583,7 +610,10 @@
"modifiers": {
"abstract": false
},
- "children": []
+ "children": [],
+ "supers": [
+ "class/dart:_interceptors::JSArray"
+ ]
},
"dart:_interceptors::JavaScriptObject": {
"id": "class/dart:_interceptors::JavaScriptObject",
@@ -595,7 +625,10 @@
"modifiers": {
"abstract": false
},
- "children": []
+ "children": [],
+ "supers": [
+ "class/dart:_interceptors::Interceptor"
+ ]
},
"dart:_interceptors::LegacyJavaScriptObject": {
"id": "class/dart:_interceptors::LegacyJavaScriptObject",
@@ -610,6 +643,9 @@
"children": [
"function/dart:_interceptors::LegacyJavaScriptObject.hashCode",
"function/dart:_interceptors::LegacyJavaScriptObject.toString"
+ ],
+ "supers": [
+ "class/dart:_interceptors::JavaScriptObject"
]
},
"dart:_interceptors::PlainJavaScriptObject": {
@@ -622,7 +658,10 @@
"modifiers": {
"abstract": false
},
- "children": []
+ "children": [],
+ "supers": [
+ "class/dart:_interceptors::LegacyJavaScriptObject"
+ ]
},
"dart:_interceptors::UnknownJavaScriptObject": {
"id": "class/dart:_interceptors::UnknownJavaScriptObject",
@@ -634,7 +673,10 @@
"modifiers": {
"abstract": false
},
- "children": []
+ "children": [],
+ "supers": [
+ "class/dart:_interceptors::LegacyJavaScriptObject"
+ ]
},
"dart:_internal::LateError": {
"id": "class/dart:_internal::LateError",
@@ -651,6 +693,9 @@
"function/dart:_internal::LateError.LateError.fieldADI",
"function/dart:_internal::LateError.LateError.localNI",
"function/dart:_internal::LateError.toString"
+ ],
+ "supers": [
+ "class/dart:core::Error"
]
},
"dart:_internal::NotNullableError": {
@@ -666,6 +711,10 @@
"children": [
"field/dart:_internal::NotNullableError._name",
"function/dart:_internal::NotNullableError.NotNullableError"
+ ],
+ "supers": [
+ "class/dart:core::Error",
+ "class/dart:core::TypeError"
]
},
"dart:_js_helper::BoundClosure": {
@@ -695,6 +744,9 @@
"function/dart:_js_helper::BoundClosure.receiverFieldName",
"function/dart:_js_helper::BoundClosure.receiverOf",
"function/dart:_js_helper::BoundClosure.toString"
+ ],
+ "supers": [
+ "class/dart:_js_helper::TearOffClosure"
]
},
"dart:_js_helper::Closure": {
@@ -717,7 +769,8 @@
"function/dart:_js_helper::Closure.fromTearOff",
"function/dart:_js_helper::Closure.isCsp",
"function/dart:_js_helper::Closure.toString"
- ]
+ ],
+ "supers": []
},
"dart:_js_helper::Closure0Args": {
"id": "class/dart:_js_helper::Closure0Args",
@@ -729,7 +782,10 @@
"modifiers": {
"abstract": true
},
- "children": []
+ "children": [],
+ "supers": [
+ "class/dart:_js_helper::Closure"
+ ]
},
"dart:_js_helper::Closure2Args": {
"id": "class/dart:_js_helper::Closure2Args",
@@ -741,7 +797,10 @@
"modifiers": {
"abstract": true
},
- "children": []
+ "children": [],
+ "supers": [
+ "class/dart:_js_helper::Closure"
+ ]
},
"dart:_js_helper::DeferredNotLoadedError": {
"id": "class/dart:_js_helper::DeferredNotLoadedError",
@@ -757,6 +816,9 @@
"field/dart:_js_helper::DeferredNotLoadedError.libraryName",
"function/dart:_js_helper::DeferredNotLoadedError.DeferredNotLoadedError",
"function/dart:_js_helper::DeferredNotLoadedError.toString"
+ ],
+ "supers": [
+ "class/dart:core::Error"
]
},
"dart:_js_helper::ExceptionAndStackTrace": {
@@ -773,7 +835,8 @@
"field/dart:_js_helper::ExceptionAndStackTrace.dartException",
"field/dart:_js_helper::ExceptionAndStackTrace.stackTrace",
"function/dart:_js_helper::ExceptionAndStackTrace.ExceptionAndStackTrace"
- ]
+ ],
+ "supers": []
},
"dart:_js_helper::JsLinkedHashMap": {
"id": "class/dart:_js_helper::JsLinkedHashMap",
@@ -815,6 +878,10 @@
"function/dart:_js_helper::JsLinkedHashMap.keys",
"function/dart:_js_helper::JsLinkedHashMap.length",
"function/dart:_js_helper::JsLinkedHashMap.toString"
+ ],
+ "supers": [
+ "class/dart:collection::LinkedHashMap",
+ "class/dart:collection::MapBase"
]
},
"dart:_js_helper::JsNoSuchMethodError": {
@@ -833,6 +900,9 @@
"field/dart:_js_helper::JsNoSuchMethodError._receiver",
"function/dart:_js_helper::JsNoSuchMethodError.JsNoSuchMethodError",
"function/dart:_js_helper::JsNoSuchMethodError.toString"
+ ],
+ "supers": [
+ "class/dart:core::Error"
]
},
"dart:_js_helper::LinkedHashMapCell": {
@@ -851,7 +921,8 @@
"field/dart:_js_helper::LinkedHashMapCell.hashMapCellKey",
"field/dart:_js_helper::LinkedHashMapCell.hashMapCellValue",
"function/dart:_js_helper::LinkedHashMapCell.LinkedHashMapCell"
- ]
+ ],
+ "supers": []
},
"dart:_js_helper::LinkedHashMapKeyIterable": {
"id": "class/dart:_js_helper::LinkedHashMapKeyIterable",
@@ -867,7 +938,8 @@
"field/dart:_js_helper::LinkedHashMapKeyIterable._map",
"function/dart:_js_helper::LinkedHashMapKeyIterable.LinkedHashMapKeyIterable",
"function/dart:_js_helper::LinkedHashMapKeyIterable.length"
- ]
+ ],
+ "supers": []
},
"dart:_js_helper::LinkedHashMapKeyIterator": {
"id": "class/dart:_js_helper::LinkedHashMapKeyIterator",
@@ -884,7 +956,8 @@
"field/dart:_js_helper::LinkedHashMapKeyIterator._current",
"field/dart:_js_helper::LinkedHashMapKeyIterator._map",
"field/dart:_js_helper::LinkedHashMapKeyIterator._modifications"
- ]
+ ],
+ "supers": []
},
"dart:_js_helper::NullError": {
"id": "class/dart:_js_helper::NullError",
@@ -901,6 +974,9 @@
"field/dart:_js_helper::NullError._method",
"function/dart:_js_helper::NullError.NullError",
"function/dart:_js_helper::NullError.toString"
+ ],
+ "supers": [
+ "class/dart:core::TypeError"
]
},
"dart:_js_helper::NullThrownFromJavaScriptException": {
@@ -917,6 +993,9 @@
"field/dart:_js_helper::NullThrownFromJavaScriptException._irritant",
"function/dart:_js_helper::NullThrownFromJavaScriptException.NullThrownFromJavaScriptException",
"function/dart:_js_helper::NullThrownFromJavaScriptException.toString"
+ ],
+ "supers": [
+ "class/dart:core::Exception"
]
},
"dart:_js_helper::Primitives": {
@@ -940,7 +1019,8 @@
"function/dart:_js_helper::Primitives.objectToHumanReadableString",
"function/dart:_js_helper::Primitives.objectTypeName",
"function/dart:_js_helper::Primitives.stringConcatUnchecked"
- ]
+ ],
+ "supers": []
},
"dart:_js_helper::RuntimeError": {
"id": "class/dart:_js_helper::RuntimeError",
@@ -956,6 +1036,9 @@
"field/dart:_js_helper::RuntimeError.message",
"function/dart:_js_helper::RuntimeError.RuntimeError",
"function/dart:_js_helper::RuntimeError.toString"
+ ],
+ "supers": [
+ "class/dart:core::Error"
]
},
"dart:_js_helper::StaticClosure": {
@@ -971,6 +1054,9 @@
"children": [
"function/dart:_js_helper::StaticClosure.StaticClosure",
"function/dart:_js_helper::StaticClosure.toString"
+ ],
+ "supers": [
+ "class/dart:_js_helper::TearOffClosure"
]
},
"dart:_js_helper::TearOffClosure": {
@@ -983,7 +1069,10 @@
"modifiers": {
"abstract": true
},
- "children": []
+ "children": [],
+ "supers": [
+ "class/dart:_js_helper::Closure"
+ ]
},
"dart:_js_helper::TypeErrorDecoder": {
"id": "class/dart:_js_helper::TypeErrorDecoder",
@@ -1023,7 +1112,8 @@
"function/dart:_js_helper::TypeErrorDecoder.provokePropertyErrorOn",
"function/dart:_js_helper::TypeErrorDecoder.provokePropertyErrorOnNull",
"function/dart:_js_helper::TypeErrorDecoder.provokePropertyErrorOnUndefined"
- ]
+ ],
+ "supers": []
},
"dart:_js_helper::UnknownJsTypeError": {
"id": "class/dart:_js_helper::UnknownJsTypeError",
@@ -1039,6 +1129,9 @@
"field/dart:_js_helper::UnknownJsTypeError._message",
"function/dart:_js_helper::UnknownJsTypeError.UnknownJsTypeError",
"function/dart:_js_helper::UnknownJsTypeError.toString"
+ ],
+ "supers": [
+ "class/dart:core::Error"
]
},
"dart:_js_helper::_AssertionError": {
@@ -1054,6 +1147,9 @@
"children": [
"function/dart:_js_helper::_AssertionError._AssertionError",
"function/dart:_js_helper::_AssertionError.toString"
+ ],
+ "supers": [
+ "class/dart:core::AssertionError"
]
},
"dart:_js_helper::_StackTrace": {
@@ -1071,6 +1167,9 @@
"field/dart:_js_helper::_StackTrace._trace",
"function/dart:_js_helper::_StackTrace._StackTrace",
"function/dart:_js_helper::_StackTrace.toString"
+ ],
+ "supers": [
+ "class/dart:core::StackTrace"
]
},
"dart:_js_shared_embedded_names::RtiUniverseFieldNames": {
@@ -1089,7 +1188,8 @@
"field/dart:_js_shared_embedded_names::RtiUniverseFieldNames.sharedEmptyArray",
"field/dart:_js_shared_embedded_names::RtiUniverseFieldNames.typeParameterVariances",
"field/dart:_js_shared_embedded_names::RtiUniverseFieldNames.typeRules"
- ]
+ ],
+ "supers": []
},
"dart:_late_helper::_Cell": {
"id": "class/dart:_late_helper::_Cell",
@@ -1108,7 +1208,8 @@
"function/dart:_late_helper::_Cell._readLocal",
"function/dart:_late_helper::_Cell.readLocal",
"function/dart:_late_helper::_Cell.value"
- ]
+ ],
+ "supers": []
},
"dart:_recipe_syntax::Recipe": {
"id": "class/dart:_recipe_syntax::Recipe",
@@ -1124,7 +1225,8 @@
"function/dart:_recipe_syntax::Recipe.digitValue",
"function/dart:_recipe_syntax::Recipe.isDigit",
"function/dart:_recipe_syntax::Recipe.isIdentifierStart"
- ]
+ ],
+ "supers": []
},
"dart:_rti::Rti": {
"id": "class/dart:_rti::Rti",
@@ -1190,7 +1292,8 @@
"function/dart:_rti::Rti._setRest",
"function/dart:_rti::Rti._setSpecializedTestResource",
"function/dart:_rti::Rti.allocate"
- ]
+ ],
+ "supers": []
},
"dart:_rti::TypeRule": {
"id": "class/dart:_rti::TypeRule",
@@ -1205,7 +1308,8 @@
"children": [
"function/dart:_rti::TypeRule.lookupSupertype",
"function/dart:_rti::TypeRule.lookupTypeVariable"
- ]
+ ],
+ "supers": []
},
"dart:_rti::_Error": {
"id": "class/dart:_rti::_Error",
@@ -1221,6 +1325,9 @@
"field/dart:_rti::_Error._message",
"function/dart:_rti::_Error.compose",
"function/dart:_rti::_Error.toString"
+ ],
+ "supers": [
+ "class/dart:core::Error"
]
},
"dart:_rti::_FunctionParameters": {
@@ -1245,7 +1352,8 @@
"function/dart:_rti::_FunctionParameters._setOptionalPositional",
"function/dart:_rti::_FunctionParameters._setRequiredPositional",
"function/dart:_rti::_FunctionParameters.allocate"
- ]
+ ],
+ "supers": []
},
"dart:_rti::_Parser": {
"id": "class/dart:_rti::_Parser",
@@ -1285,7 +1393,8 @@
"function/dart:_rti::_Parser.toTypes",
"function/dart:_rti::_Parser.toTypesNamed",
"function/dart:_rti::_Parser.universe"
- ]
+ ],
+ "supers": []
},
"dart:_rti::_Type": {
"id": "class/dart:_rti::_Type",
@@ -1299,7 +1408,8 @@
},
"children": [
"field/dart:_rti::_Type._rti"
- ]
+ ],
+ "supers": []
},
"dart:_rti::_TypeError": {
"id": "class/dart:_rti::_TypeError",
@@ -1314,6 +1424,10 @@
"children": [
"function/dart:_rti::_TypeError._TypeError.forType",
"function/dart:_rti::_TypeError._TypeError.fromMessage"
+ ],
+ "supers": [
+ "class/dart:_rti::_Error",
+ "class/dart:core::TypeError"
]
},
"dart:_rti::_Universe": {
@@ -1389,7 +1503,8 @@
"function/dart:_rti::_Universe.sharedEmptyArray",
"function/dart:_rti::_Universe.typeParameterVariances",
"function/dart:_rti::_Universe.typeRules"
- ]
+ ],
+ "supers": []
},
"dart:_rti::_Utils": {
"id": "class/dart:_rti::_Utils",
@@ -1427,7 +1542,8 @@
"function/dart:_rti::_Utils.objectKeys",
"function/dart:_rti::_Utils.stringLessThan",
"function/dart:_rti::_Utils.substring"
- ]
+ ],
+ "supers": []
},
"dart:async::AsyncError": {
"id": "class/dart:async::AsyncError",
@@ -1445,6 +1561,9 @@
"function/dart:async::AsyncError.AsyncError",
"function/dart:async::AsyncError.defaultStackTrace",
"function/dart:async::AsyncError.toString"
+ ],
+ "supers": [
+ "class/dart:core::Error"
]
},
"dart:async::Completer": {
@@ -1459,7 +1578,8 @@
},
"children": [
"function/dart:async::Completer.Completer"
- ]
+ ],
+ "supers": []
},
"dart:async::DeferredLoadException": {
"id": "class/dart:async::DeferredLoadException",
@@ -1475,6 +1595,9 @@
"field/dart:async::DeferredLoadException._s",
"function/dart:async::DeferredLoadException.DeferredLoadException",
"function/dart:async::DeferredLoadException.toString"
+ ],
+ "supers": [
+ "class/dart:core::Exception"
]
},
"dart:async::Future": {
@@ -1491,7 +1614,8 @@
"function/dart:async::Future.Future.error",
"function/dart:async::Future.Future.value",
"function/dart:async::Future.wait"
- ]
+ ],
+ "supers": []
},
"dart:async::StreamIterator": {
"id": "class/dart:async::StreamIterator",
@@ -1505,7 +1629,8 @@
},
"children": [
"function/dart:async::StreamIterator.StreamIterator"
- ]
+ ],
+ "supers": []
},
"dart:async::Timer": {
"id": "class/dart:async::Timer",
@@ -1519,7 +1644,8 @@
},
"children": [
"function/dart:async::Timer._createTimer"
- ]
+ ],
+ "supers": []
},
"dart:async::Zone": {
"id": "class/dart:async::Zone",
@@ -1536,7 +1662,8 @@
"function/dart:async::Zone._enter",
"function/dart:async::Zone._leave",
"function/dart:async::Zone.current"
- ]
+ ],
+ "supers": []
},
"dart:async::_AsyncAwaitCompleter": {
"id": "class/dart:async::_AsyncAwaitCompleter",
@@ -1555,6 +1682,9 @@
"function/dart:async::_AsyncAwaitCompleter.complete",
"function/dart:async::_AsyncAwaitCompleter.completeError",
"function/dart:async::_AsyncAwaitCompleter.future"
+ ],
+ "supers": [
+ "class/dart:async::Completer"
]
},
"dart:async::_AsyncCallbackEntry": {
@@ -1571,7 +1701,8 @@
"field/dart:async::_AsyncCallbackEntry.callback",
"field/dart:async::_AsyncCallbackEntry.next",
"function/dart:async::_AsyncCallbackEntry._AsyncCallbackEntry"
- ]
+ ],
+ "supers": []
},
"dart:async::_AsyncCompleter": {
"id": "class/dart:async::_AsyncCompleter",
@@ -1587,6 +1718,9 @@
"function/dart:async::_AsyncCompleter._AsyncCompleter",
"function/dart:async::_AsyncCompleter._completeError",
"function/dart:async::_AsyncCompleter.complete"
+ ],
+ "supers": [
+ "class/dart:async::_Completer"
]
},
"dart:async::_AsyncRun": {
@@ -1606,7 +1740,8 @@
"function/dart:async::_AsyncRun._scheduleImmediateJsOverride",
"function/dart:async::_AsyncRun._scheduleImmediateWithSetImmediate",
"function/dart:async::_AsyncRun._scheduleImmediateWithTimer"
- ]
+ ],
+ "supers": []
},
"dart:async::_Completer": {
"id": "class/dart:async::_Completer",
@@ -1621,6 +1756,9 @@
"children": [
"field/dart:async::_Completer.future",
"function/dart:async::_Completer.completeError"
+ ],
+ "supers": [
+ "class/dart:async::Completer"
]
},
"dart:async::_Future": {
@@ -1670,6 +1808,9 @@
"function/dart:async::_Future._setValue",
"function/dart:async::_Future._thenAwait",
"function/dart:async::_Future.then"
+ ],
+ "supers": [
+ "class/dart:async::Future"
]
},
"dart:async::_FutureListener": {
@@ -1705,7 +1846,8 @@
"function/dart:async::_FutureListener.hasErrorTest",
"function/dart:async::_FutureListener.matchesErrorTest",
"function/dart:async::_FutureListener.shouldChain"
- ]
+ ],
+ "supers": []
},
"dart:async::_RootZone": {
"id": "class/dart:async::_RootZone",
@@ -1731,6 +1873,9 @@
"function/dart:async::_RootZone.runGuarded",
"function/dart:async::_RootZone.runUnary",
"function/dart:async::_RootZone.scheduleMicrotask"
+ ],
+ "supers": [
+ "class/dart:async::_Zone"
]
},
"dart:async::_StreamIterator": {
@@ -1748,6 +1893,9 @@
"field/dart:async::_StreamIterator._stateData",
"field/dart:async::_StreamIterator._subscription",
"function/dart:async::_StreamIterator._StreamIterator"
+ ],
+ "supers": [
+ "class/dart:async::StreamIterator"
]
},
"dart:async::_TimerImpl": {
@@ -1765,6 +1913,9 @@
"field/dart:async::_TimerImpl._once",
"field/dart:async::_TimerImpl._tick",
"function/dart:async::_TimerImpl._TimerImpl"
+ ],
+ "supers": [
+ "class/dart:async::Timer"
]
},
"dart:async::_Zone": {
@@ -1779,6 +1930,9 @@
},
"children": [
"function/dart:async::_Zone.inSameErrorZone"
+ ],
+ "supers": [
+ "class/dart:async::Zone"
]
},
"dart:async::_ZoneFunction": {
@@ -1794,7 +1948,8 @@
"children": [
"field/dart:async::_ZoneFunction.function",
"field/dart:async::_ZoneFunction.zone"
- ]
+ ],
+ "supers": []
},
"dart:collection::IterableBase": {
"id": "class/dart:collection::IterableBase",
@@ -1808,7 +1963,8 @@
},
"children": [
"function/dart:collection::IterableBase.iterableToFullString"
- ]
+ ],
+ "supers": []
},
"dart:collection::LinkedHashMap": {
"id": "class/dart:collection::LinkedHashMap",
@@ -1822,7 +1978,8 @@
},
"children": [
"function/dart:collection::LinkedHashMap.LinkedHashMap._empty"
- ]
+ ],
+ "supers": []
},
"dart:collection::LinkedHashSet": {
"id": "class/dart:collection::LinkedHashSet",
@@ -1836,7 +1993,8 @@
},
"children": [
"function/dart:collection::LinkedHashSet.LinkedHashSet"
- ]
+ ],
+ "supers": []
},
"dart:collection::ListBase": {
"id": "class/dart:collection::ListBase",
@@ -1850,7 +2008,8 @@
},
"children": [
"function/dart:collection::ListBase.listToString"
- ]
+ ],
+ "supers": []
},
"dart:collection::MapBase": {
"id": "class/dart:collection::MapBase",
@@ -1864,6 +2023,9 @@
},
"children": [
"function/dart:collection::MapBase.mapToString"
+ ],
+ "supers": [
+ "class/dart:collection::MapMixin"
]
},
"dart:collection::MapMixin": {
@@ -1879,7 +2041,8 @@
"children": [
"function/dart:collection::MapMixin.length",
"function/dart:collection::MapMixin.toString"
- ]
+ ],
+ "supers": []
},
"dart:collection::SetMixin": {
"id": "class/dart:collection::SetMixin",
@@ -1893,7 +2056,8 @@
},
"children": [
"function/dart:collection::SetMixin.toString"
- ]
+ ],
+ "supers": []
},
"dart:collection::_LinkedCustomHashSet": {
"id": "class/dart:collection::_LinkedCustomHashSet",
@@ -1909,6 +2073,9 @@
"field/dart:collection::_LinkedCustomHashSet._equality",
"field/dart:collection::_LinkedCustomHashSet._hasher",
"field/dart:collection::_LinkedCustomHashSet._validKey"
+ ],
+ "supers": [
+ "class/dart:collection::_LinkedHashSet"
]
},
"dart:collection::_LinkedHashSet": {
@@ -1948,6 +2115,10 @@
"function/dart:collection::_LinkedHashSet.contains",
"function/dart:collection::_LinkedHashSet.iterator",
"function/dart:collection::_LinkedHashSet.length"
+ ],
+ "supers": [
+ "class/dart:collection::LinkedHashSet",
+ "class/dart:collection::_SetBase"
]
},
"dart:collection::_LinkedHashSetCell": {
@@ -1965,7 +2136,8 @@
"field/dart:collection::_LinkedHashSetCell._next",
"field/dart:collection::_LinkedHashSetCell._previous",
"function/dart:collection::_LinkedHashSetCell._LinkedHashSetCell"
- ]
+ ],
+ "supers": []
},
"dart:collection::_LinkedHashSetIterator": {
"id": "class/dart:collection::_LinkedHashSetIterator",
@@ -1985,7 +2157,8 @@
"function/dart:collection::_LinkedHashSetIterator._LinkedHashSetIterator",
"function/dart:collection::_LinkedHashSetIterator.current",
"function/dart:collection::_LinkedHashSetIterator.moveNext"
- ]
+ ],
+ "supers": []
},
"dart:collection::_LinkedIdentityHashSet": {
"id": "class/dart:collection::_LinkedIdentityHashSet",
@@ -1999,6 +2172,9 @@
},
"children": [
"function/dart:collection::_LinkedIdentityHashSet._LinkedIdentityHashSet"
+ ],
+ "supers": [
+ "class/dart:collection::_LinkedHashSet"
]
},
"dart:collection::_SetBase": {
@@ -2011,7 +2187,8 @@
"modifiers": {
"abstract": true
},
- "children": []
+ "children": [],
+ "supers": []
},
"dart:core::ArgumentError": {
"id": "class/dart:core::ArgumentError",
@@ -2033,6 +2210,9 @@
"function/dart:core::ArgumentError._errorExplanation",
"function/dart:core::ArgumentError._errorName",
"function/dart:core::ArgumentError.toString"
+ ],
+ "supers": [
+ "class/dart:core::Error"
]
},
"dart:core::AssertionError": {
@@ -2049,6 +2229,9 @@
"field/dart:core::AssertionError.message",
"function/dart:core::AssertionError.AssertionError",
"function/dart:core::AssertionError.toString"
+ ],
+ "supers": [
+ "class/dart:core::Error"
]
},
"dart:core::ConcurrentModificationError": {
@@ -2065,6 +2248,9 @@
"field/dart:core::ConcurrentModificationError.modifiedObject",
"function/dart:core::ConcurrentModificationError.ConcurrentModificationError",
"function/dart:core::ConcurrentModificationError.toString"
+ ],
+ "supers": [
+ "class/dart:core::Error"
]
},
"dart:core::CyclicInitializationError": {
@@ -2081,6 +2267,9 @@
"field/dart:core::CyclicInitializationError.variableName",
"function/dart:core::CyclicInitializationError.CyclicInitializationError",
"function/dart:core::CyclicInitializationError.toString"
+ ],
+ "supers": [
+ "class/dart:core::Error"
]
},
"dart:core::Duration": {
@@ -2096,7 +2285,8 @@
"children": [
"field/dart:core::Duration._duration",
"function/dart:core::Duration.inMilliseconds"
- ]
+ ],
+ "supers": []
},
"dart:core::Error": {
"id": "class/dart:core::Error",
@@ -2115,7 +2305,8 @@
"function/dart:core::Error.safeToString",
"function/dart:core::Error.stackTrace",
"function/dart:core::Error.throwWithStackTrace"
- ]
+ ],
+ "supers": []
},
"dart:core::Exception": {
"id": "class/dart:core::Exception",
@@ -2129,7 +2320,8 @@
},
"children": [
"function/dart:core::Exception.Exception"
- ]
+ ],
+ "supers": []
},
"dart:core::IndexError": {
"id": "class/dart:core::IndexError",
@@ -2147,6 +2339,10 @@
"function/dart:core::IndexError.IndexError",
"function/dart:core::IndexError._errorExplanation",
"function/dart:core::IndexError._errorName"
+ ],
+ "supers": [
+ "class/dart:core::ArgumentError",
+ "class/dart:core::RangeError"
]
},
"dart:core::List": {
@@ -2163,7 +2359,8 @@
"function/dart:core::List.List.filled",
"function/dart:core::List.List.from",
"function/dart:core::List.List.generate"
- ]
+ ],
+ "supers": []
},
"dart:core::Null": {
"id": "class/dart:core::Null",
@@ -2178,7 +2375,8 @@
"children": [
"function/dart:core::Null.hashCode",
"function/dart:core::Null.toString"
- ]
+ ],
+ "supers": []
},
"dart:core::NullThrownError": {
"id": "class/dart:core::NullThrownError",
@@ -2193,6 +2391,9 @@
"children": [
"function/dart:core::NullThrownError.NullThrownError",
"function/dart:core::NullThrownError.toString"
+ ],
+ "supers": [
+ "class/dart:core::Error"
]
},
"dart:core::Object": {
@@ -2209,7 +2410,8 @@
"function/dart:core::Object.==",
"function/dart:core::Object.hashCode",
"function/dart:core::Object.toString"
- ]
+ ],
+ "supers": []
},
"dart:core::RangeError": {
"id": "class/dart:core::RangeError",
@@ -2228,6 +2430,9 @@
"function/dart:core::RangeError.RangeError.value",
"function/dart:core::RangeError._errorExplanation",
"function/dart:core::RangeError._errorName"
+ ],
+ "supers": [
+ "class/dart:core::ArgumentError"
]
},
"dart:core::StackOverflowError": {
@@ -2244,6 +2449,9 @@
"function/dart:core::StackOverflowError.StackOverflowError",
"function/dart:core::StackOverflowError.stackTrace",
"function/dart:core::StackOverflowError.toString"
+ ],
+ "supers": [
+ "class/dart:core::Error"
]
},
"dart:core::StackTrace": {
@@ -2258,7 +2466,8 @@
},
"children": [
"function/dart:core::StackTrace.current"
- ]
+ ],
+ "supers": []
},
"dart:core::StateError": {
"id": "class/dart:core::StateError",
@@ -2274,6 +2483,9 @@
"field/dart:core::StateError.message",
"function/dart:core::StateError.StateError",
"function/dart:core::StateError.toString"
+ ],
+ "supers": [
+ "class/dart:core::Error"
]
},
"dart:core::StringBuffer": {
@@ -2296,7 +2508,8 @@
"function/dart:core::StringBuffer.toString",
"function/dart:core::StringBuffer.write",
"function/dart:core::StringBuffer.writeAll"
- ]
+ ],
+ "supers": []
},
"dart:core::TypeError": {
"id": "class/dart:core::TypeError",
@@ -2308,7 +2521,10 @@
"modifiers": {
"abstract": false
},
- "children": []
+ "children": [],
+ "supers": [
+ "class/dart:core::Error"
+ ]
},
"dart:core::UnsupportedError": {
"id": "class/dart:core::UnsupportedError",
@@ -2324,6 +2540,9 @@
"field/dart:core::UnsupportedError.message",
"function/dart:core::UnsupportedError.UnsupportedError",
"function/dart:core::UnsupportedError.toString"
+ ],
+ "supers": [
+ "class/dart:core::Error"
]
},
"dart:core::_Enum": {
@@ -2339,7 +2558,8 @@
"children": [
"field/dart:core::_Enum._name",
"field/dart:core::_Enum.index"
- ]
+ ],
+ "supers": []
},
"dart:core::_Exception": {
"id": "class/dart:core::_Exception",
@@ -2355,6 +2575,9 @@
"field/dart:core::_Exception.message",
"function/dart:core::_Exception._Exception",
"function/dart:core::_Exception.toString"
+ ],
+ "supers": [
+ "class/dart:core::Exception"
]
},
"dart:core::_StringStackTrace": {
@@ -2370,6 +2593,9 @@
"children": [
"field/dart:core::_StringStackTrace._stackTrace",
"function/dart:core::_StringStackTrace.toString"
+ ],
+ "supers": [
+ "class/dart:core::StackTrace"
]
},
"dart:core::bool": {
@@ -2385,7 +2611,8 @@
"children": [
"function/dart:core::bool.hashCode",
"function/dart:core::bool.toString"
- ]
+ ],
+ "supers": []
}
},
"classType": {
@@ -67158,7 +67385,7 @@
"id": "outputUnit/1",
"kind": "outputUnit",
"name": "1",
- "size": 594,
+ "size": 618,
"filename": "hello_world_deferred.js_1.part.js",
"imports": [
"deferred_import"
@@ -67168,7 +67395,7 @@
"id": "outputUnit/main",
"kind": "outputUnit",
"name": "main",
- "size": 188115,
+ "size": 188139,
"filename": "hello_world_deferred.js",
"imports": []
}
@@ -67187,12 +67414,12 @@
"dump_minor_version": 1,
"program": {
"entrypoint": "function/hello_world_deferred.dart::main",
- "size": 188709,
- "ramUsage": "218.516 MB",
+ "size": 188757,
+ "ramUsage": "222.625 MB",
"dart2jsVersion": null,
- "compilationMoment": "2022-07-08 12:58:35.955576",
- "compilationDuration": 1806706,
- "toJsonDuration": 3000,
+ "compilationMoment": "2022-07-14 17:35:30.061216",
+ "compilationDuration": 1870645,
+ "toJsonDuration": 2000,
"dumpInfoDuration": 0,
"noSuchMethodEnabled": false,
"isRuntimeTypeUsed": false,
diff --git a/pkg/dart2js_info/test/json_to_proto_test.dart b/pkg/dart2js_info/test/json_to_proto_test.dart
index 5b20745..95d75be 100644
--- a/pkg/dart2js_info/test/json_to_proto_test.dart
+++ b/pkg/dart2js_info/test/json_to_proto_test.dart
@@ -20,11 +20,11 @@
final proto = AllInfoProtoCodec().encode(decoded);
expect(proto.program.entrypointId, isNotNull);
- expect(proto.program.size, 90269);
+ expect(proto.program.size, 90293);
expect(proto.program.compilationMoment.toInt(),
- DateTime.parse("2022-07-08 12:57:36.142141").microsecondsSinceEpoch);
+ DateTime.parse("2022-07-14 17:35:15.006337").microsecondsSinceEpoch);
expect(proto.program.toProtoDuration.toInt(),
- Duration(milliseconds: 1).inMicroseconds);
+ Duration(milliseconds: 2).inMicroseconds);
expect(proto.program.dumpInfoDuration.toInt(),
Duration(milliseconds: 0).inMicroseconds);
expect(proto.program.noSuchMethodEnabled, isFalse);
diff --git a/pkg/dart2js_info/test/parse_test.dart b/pkg/dart2js_info/test/parse_test.dart
index be06468..0145a79 100644
--- a/pkg/dart2js_info/test/parse_test.dart
+++ b/pkg/dart2js_info/test/parse_test.dart
@@ -20,11 +20,11 @@
expect(program, isNotNull);
expect(program!.entrypoint, isNotNull);
- expect(program.size, 90269);
+ expect(program.size, 90293);
expect(program.compilationMoment,
- DateTime.parse("2022-07-08 12:57:36.142141"));
- expect(program.compilationDuration, Duration(microseconds: 1321045));
- expect(program.toJsonDuration, Duration(milliseconds: 1));
+ DateTime.parse("2022-07-14 17:35:15.006337"));
+ expect(program.compilationDuration, Duration(microseconds: 1289072));
+ expect(program.toJsonDuration, Duration(milliseconds: 2));
expect(program.dumpInfoDuration, Duration(seconds: 0));
expect(program.noSuchMethodEnabled, false);
expect(program.minified, false);
diff --git a/pkg/dev_compiler/lib/ddc.dart b/pkg/dev_compiler/lib/ddc.dart
index feaa482..2fb2b45 100755
--- a/pkg/dev_compiler/lib/ddc.dart
+++ b/pkg/dev_compiler/lib/ddc.dart
@@ -2,8 +2,6 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-// @dart = 2.9
-
/// Command line entry point for Dart Development Compiler (dartdevc), used to
/// compile a collection of dart libraries into a single JS module
@@ -21,7 +19,7 @@
///
/// [sendPort] may be passed in when started in an isolate. If provided, it is
/// used for bazel worker communication instead of stdin/stdout.
-Future internalMain(List<String> args, [SendPort sendPort]) async {
+Future internalMain(List<String> args, [SendPort? sendPort]) async {
// Always returns a new modifiable list.
var parsedArgs = ParsedArguments.from(args);
@@ -51,7 +49,7 @@
/// Keeps track of our last compilation result so it can potentially be
/// re-used in a worker.
- CompilerResult lastResult;
+ CompilerResult? lastResult;
/// Performs each individual work request.
@override
@@ -74,7 +72,7 @@
output.writeln(message.toString());
}));
return WorkResponse()
- ..exitCode = lastResult.success ? 0 : 1
+ ..exitCode = lastResult!.success ? 0 : 1
..output = output.toString();
}
}
@@ -87,12 +85,12 @@
print('>>> BATCH START');
- String line;
- CompilerResult result;
+ String? line;
+ CompilerResult? result;
while ((line = stdin.readLineSync(encoding: utf8))?.isNotEmpty == true) {
totalTests++;
- var args = batchArgs.merge(line.split(RegExp(r'\s+')));
+ var args = batchArgs.merge(line!.split(RegExp(r'\s+')));
String outcome;
try {
diff --git a/pkg/dev_compiler/test/expression_compiler/scope_offset_test.dart b/pkg/dev_compiler/test/expression_compiler/scope_offset_test.dart
index 933dce6..6374d43 100644
--- a/pkg/dev_compiler/test/expression_compiler/scope_offset_test.dart
+++ b/pkg/dev_compiler/test/expression_compiler/scope_offset_test.dart
@@ -2,8 +2,6 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-// @dart = 2.9
-
import 'package:dev_compiler/src/kernel/expression_compiler.dart';
import 'package:front_end/src/api_unstable/ddc.dart';
import 'package:front_end/src/compute_platform_binaries_location.dart';
@@ -109,11 +107,11 @@
const TypeMatcher<FunctionNode>()
.having(
(c) => c.fileOffset,
- '${fun.parent.toText(astTextStrategyForTesting)} : fileOffset',
+ '${fun.parent!.toText(astTextStrategyForTesting)} : fileOffset',
isNot(equals(-1)))
.having(
(c) => c.fileEndOffset,
- '${fun.parent.toText(astTextStrategyForTesting)} : fileEndOffset',
+ '${fun.parent!.toText(astTextStrategyForTesting)} : fileEndOffset',
isNot(equals(-1))));
super.visitFunctionNode(fun);
diff --git a/pkg/dev_compiler/test/worker/worker_test.dart b/pkg/dev_compiler/test/worker/worker_test.dart
index 6e3e03e..ea2d52b 100644
--- a/pkg/dev_compiler/test/worker/worker_test.dart
+++ b/pkg/dev_compiler/test/worker/worker_test.dart
@@ -2,8 +2,6 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-// @dart = 2.9
-
import 'dart:async';
import 'dart:convert';
import 'dart:io';
@@ -379,9 +377,9 @@
}
Future<WorkResponse> _readResponse(MessageGrouper messageGrouper) async {
- var buffer = await messageGrouper.next as List<int>;
+ var buffer = await messageGrouper.next as List<int>?;
try {
- return WorkResponse.fromBuffer(buffer);
+ return WorkResponse.fromBuffer(buffer!);
} catch (_) {
var bufferAsString =
buffer == null ? '' : 'String: ${utf8.decode(buffer)}\n';
diff --git a/sdk/lib/_http/http_headers.dart b/sdk/lib/_http/http_headers.dart
index 2ccf23a..dad7403 100644
--- a/sdk/lib/_http/http_headers.dart
+++ b/sdk/lib/_http/http_headers.dart
@@ -4,6 +4,8 @@
part of dart._http;
+final _digitsValidator = RegExp(r"^\d+$");
+
class _HttpHeaders implements HttpHeaders {
final Map<String, List<String>> _headers;
// The original header names keyed by the lowercase header names.
@@ -373,12 +375,18 @@
void _addContentLength(String name, value) {
if (value is int) {
- contentLength = value;
+ if (value < 0) {
+ throw HttpException("Content-Length must contain only digits");
+ }
} else if (value is String) {
- contentLength = int.parse(value);
+ if (!_digitsValidator.hasMatch(value)) {
+ throw HttpException("Content-Length must contain only digits");
+ }
+ value = int.parse(value);
} else {
throw HttpException("Unexpected type for header named $name");
}
+ contentLength = value;
}
void _addTransferEncoding(String name, value) {
diff --git a/tests/standalone/io/http_headers_content_length_test.dart b/tests/standalone/io/http_headers_content_length_test.dart
index 9997ffe..3ccf962 100644
--- a/tests/standalone/io/http_headers_content_length_test.dart
+++ b/tests/standalone/io/http_headers_content_length_test.dart
@@ -6,6 +6,8 @@
import "package:expect/expect.dart";
+// See also http_headers_test.dart.
+
Future<void> main() async {
final server = await HttpServer.bind("localhost", 0);
final request = await HttpClient().get("localhost", server.port, "/");
diff --git a/tests/standalone/io/http_headers_test.dart b/tests/standalone/io/http_headers_test.dart
index f2cfb6c..99884f6 100644
--- a/tests/standalone/io/http_headers_test.dart
+++ b/tests/standalone/io/http_headers_test.dart
@@ -361,6 +361,48 @@
Expect.equals("v; a=\"ø\"", HeaderValue("v", {"a": "ø"}).toString());
}
+void testContentLength() {
+ // See also http_headers_content_length_test.dart.
+ var headers = new _HttpHeaders("1.1");
+ headers.set("content-length", ["256"]);
+ Expect.equals(256, headers.contentLength);
+ Expect.listEquals(["256"], headers["content-length"]!);
+ Expect.equals("256", headers.value("content-length"));
+
+ headers = new _HttpHeaders("1.1");
+ headers.set("content-length", [256]);
+ Expect.equals(256, headers.contentLength);
+ Expect.listEquals(["256"], headers["content-length"]!);
+ Expect.equals("256", headers.value("content-length"));
+
+ headers = new _HttpHeaders("1.1");
+ var e = Expect.throws<HttpException>(
+ () => headers.set("content-length", ["cat"]));
+ Expect.isTrue(e.message.contains("Content-Length must contain only digits"));
+
+ headers = new _HttpHeaders("1.1");
+ e = Expect.throws(
+ () => headers.set("content-length", ["-3"]), (e) => e is HttpException);
+ Expect.isTrue(e.message.contains("Content-Length must contain only digits"));
+
+ headers = new _HttpHeaders("1.1");
+ e = Expect.throws(
+ () => headers.set("content-length", [-3]), (e) => e is HttpException);
+ Expect.isTrue(e.message.contains("Content-Length must contain only digits"));
+
+ headers = new _HttpHeaders("1.1");
+ e = Expect.throws(
+ () => headers.set("content-length", [[]]), (e) => e is HttpException);
+ Expect.isTrue(
+ e.message.contains("Unexpected type for header named content-length"));
+
+ headers = new _HttpHeaders("1.1");
+ headers.set("content-length", ["1", "2"]);
+ Expect.equals(2, headers.contentLength);
+ Expect.listEquals(["2"], headers["content-length"]!);
+ Expect.equals("2", headers.value("content-length"));
+}
+
void testContentType() {
void check(ContentType contentType, String primaryType, String subType,
[Map<String, String?>? parameters]) {
@@ -743,6 +785,7 @@
testTransferEncoding();
testEnumeration();
testHeaderValue();
+ testContentLength();
testContentType();
testKnownContentTypes();
testContentTypeCache();
diff --git a/tests/standalone_2/io/http_headers_content_length_test.dart b/tests/standalone_2/io/http_headers_content_length_test.dart
index 6679db2..fb29369 100644
--- a/tests/standalone_2/io/http_headers_content_length_test.dart
+++ b/tests/standalone_2/io/http_headers_content_length_test.dart
@@ -4,6 +4,8 @@
// @dart = 2.9
+// See also http_headers_test.dart.
+
import "dart:io";
import "package:expect/expect.dart";
diff --git a/tools/VERSION b/tools/VERSION
index b2c2691..af12ecc 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
MAJOR 2
MINOR 19
PATCH 0
-PRERELEASE 8
+PRERELEASE 9
PRERELEASE_PATCH 0
\ No newline at end of file