[dart2js] Adding closure tests for dump info members
Change-Id: I73d6e262941fa1b8278f32c3e17689e45dea4ebd
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/243383
Commit-Queue: Mark Zhou <markzipan@google.com>
Reviewed-by: Joshua Litt <joshualitt@google.com>
diff --git a/pkg/compiler/test/dump_info/data/closures.dart b/pkg/compiler/test/dump_info/data/closures.dart
new file mode 100644
index 0000000..7bc3f58
--- /dev/null
+++ b/pkg/compiler/test/dump_info/data/closures.dart
@@ -0,0 +1,1153 @@
+/*library:
+ constant=[
+ {
+ "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": null,
+ "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.Interceptor_methods = J.Interceptor.prototype;\n",
+ "kind": "constant",
+ "name": null,
+ "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": null,
+ "size": 41,
+ "outputUnit": "outputUnit/main",
+ "code": "B.JSArray_methods = J.JSArray.prototype;\n"
+},
+ {
+ "id": "constant/B.JSString_methods = J.JSString.prototype;\n",
+ "kind": "constant",
+ "name": null,
+ "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": null,
+ "size": 59,
+ "outputUnit": "outputUnit/main",
+ "code": "B.JavaScriptObject_methods = J.JavaScriptObject.prototype;\n"
+}],
+ deferredFiles=[{}],
+ dependencies=[{}],
+ library=[{
+ "id": "library/memory:sdk/tests/web/native/main.dart::",
+ "kind": "library",
+ "name": "<unnamed>",
+ "size": 10341,
+ "children": [
+ "class/memory:sdk/tests/web/native/main.dart::Class1",
+ "function/memory:sdk/tests/web/native/main.dart::main",
+ "function/memory:sdk/tests/web/native/main.dart::topLevelMethod1",
+ "function/memory:sdk/tests/web/native/main.dart::topLevelMethod2",
+ "function/memory:sdk/tests/web/native/main.dart::topLevelMethod3",
+ "function/memory:sdk/tests/web/native/main.dart::topLevelMethod4",
+ "function/memory:sdk/tests/web/native/main.dart::twoLocals"
+ ],
+ "canonicalUri": "memory:sdk/tests/web/native/main.dart"
+}],
+ outputUnits=[{
+ "id": "outputUnit/main",
+ "kind": "outputUnit",
+ "name": "main",
+ "size": 107495,
+ "filename": "out",
+ "imports": []
+}]
+*/
+
+/*class: Class1:class=[{
+ "id": "class/memory:sdk/tests/web/native/main.dart::Class1",
+ "kind": "class",
+ "name": "Class1",
+ "size": 6151,
+ "outputUnit": "outputUnit/main",
+ "parent": "library/memory:sdk/tests/web/native/main.dart::",
+ "modifiers": {
+ "abstract": false
+ },
+ "children": [
+ "field/memory:sdk/tests/web/native/main.dart::Class1.field",
+ "field/memory:sdk/tests/web/native/main.dart::Class1.funcField",
+ "function/memory:sdk/tests/web/native/main.dart::Class1.Class1",
+ "function/memory:sdk/tests/web/native/main.dart::Class1.Class1.fact",
+ "function/memory:sdk/tests/web/native/main.dart::Class1.Class1.fact2",
+ "function/memory:sdk/tests/web/native/main.dart::Class1.Class1.setFunc",
+ "function/memory:sdk/tests/web/native/main.dart::Class1.method1",
+ "function/memory:sdk/tests/web/native/main.dart::Class1.method2",
+ "function/memory:sdk/tests/web/native/main.dart::Class1.method3",
+ "function/memory:sdk/tests/web/native/main.dart::Class1.method4",
+ "function/memory:sdk/tests/web/native/main.dart::Class1.method5",
+ "function/memory:sdk/tests/web/native/main.dart::Class1.method6",
+ "function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod1",
+ "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"
+ ]
+}]*/
+class Class1<T> {
+ /*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=[{
+ "id": "field/memory:sdk/tests/web/native/main.dart::Class1.funcField",
+ "kind": "field",
+ "name": "funcField",
+ "size": 0,
+ "outputUnit": "outputUnit/main",
+ "parent": "class/memory:sdk/tests/web/native/main.dart::Class1",
+ "children": [],
+ "inferredType": "[null|subclass=Closure]",
+ "code": "",
+ "type": "dynamic"
+}],
+ holding=[
+ {"id":"field/memory:sdk/tests/web/native/main.dart::Class1.funcField","mask":null},
+ {"id":"function/dart:_js_helper::throwCyclicInit","mask":null},
+ {"id":"function/dart:_late_helper::throwLateFieldADI","mask":null}]
+ */
+ var funcField;
+
+ /*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()"
+}],
+ 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;
+ }
+
+ /*member: Class1.setFunc:
+ function=[{
+ "id": "function/memory:sdk/tests/web/native/main.dart::Class1.Class1.setFunc",
+ "kind": "function",
+ "name": "Class1.setFunc",
+ "size": 132,
+ "outputUnit": "outputUnit/main",
+ "parent": "class/memory:sdk/tests/web/native/main.dart::Class1",
+ "children": [],
+ "modifiers": {
+ "static": false,
+ "const": false,
+ "factory": false,
+ "external": false
+ },
+ "returnType": "dynamic",
+ "inferredReturnType": "[exact=Class1]",
+ "parameters": [
+ {
+ "name": "funcField",
+ "type": "[subclass=Closure]",
+ "declaredType": "dynamic"
+ }
+ ],
+ "sideEffects": "SideEffects(reads nothing; writes nothing)",
+ "inlinedCount": 0,
+ "code": "Class1$setFunc(funcField, $T) {\n return new A.Class1(new A.Class1_field_closure($T), funcField, $T._eval$1(\"Class1<0>\"));\n }",
+ "type": "dynamic Function(dynamic)"
+}],
+ 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.setFunc(this.funcField);
+ /*member: Class1.fact:function=[{
+ "id": "function/memory:sdk/tests/web/native/main.dart::Class1.Class1.fact",
+ "kind": "function",
+ "name": "Class1.fact",
+ "size": 0,
+ "outputUnit": "outputUnit/main",
+ "parent": "class/memory:sdk/tests/web/native/main.dart::Class1",
+ "children": [],
+ "modifiers": {
+ "static": false,
+ "const": false,
+ "factory": true,
+ "external": false
+ },
+ "returnType": "Class1<#Afree>",
+ "inferredReturnType": "[exact=Class1]",
+ "parameters": [],
+ "sideEffects": "SideEffects(reads nothing; writes field)",
+ "inlinedCount": 1,
+ "code": "",
+ "type": "Class1<#A> Function<#A extends Object?>()"
+}]*/
+ factory Class1.fact() => new Class1<T>();
+ /*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?>()"
+}],
+ 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=[{
+ "id": "function/memory:sdk/tests/web/native/main.dart::Class1.method1",
+ "kind": "function",
+ "name": "method1",
+ "size": 0,
+ "outputUnit": "outputUnit/main",
+ "parent": "class/memory:sdk/tests/web/native/main.dart::Class1",
+ "children": [],
+ "modifiers": {
+ "static": false,
+ "const": false,
+ "factory": false,
+ "external": false
+ },
+ "returnType": "dynamic",
+ "inferredReturnType": "[exact=_Type]",
+ "parameters": [],
+ "sideEffects": "SideEffects(reads nothing; writes nothing)",
+ "inlinedCount": 1,
+ "code": "",
+ "type": "dynamic Function()"
+}]*/
+ method1() => T;
+ /*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()"
+}],
+ 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;
+ }
+
+ /*member: Class1.method3:function=[{
+ "id": "function/memory:sdk/tests/web/native/main.dart::Class1.method3",
+ "kind": "function",
+ "name": "method3",
+ "size": 0,
+ "outputUnit": "outputUnit/main",
+ "parent": "class/memory:sdk/tests/web/native/main.dart::Class1",
+ "children": [],
+ "modifiers": {
+ "static": false,
+ "const": false,
+ "factory": false,
+ "external": false
+ },
+ "returnType": "dynamic",
+ "inferredReturnType": "[exact=_Type]",
+ "parameters": [],
+ "sideEffects": "SideEffects(reads nothing; writes nothing)",
+ "inlinedCount": 1,
+ "code": "",
+ "type": "dynamic Function<#A extends Object?>()"
+}]*/
+ method3<S>() => S;
+ /*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?>()"
+}],
+ 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;
+ }
+
+ /*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()"
+}],
+ 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;
+ }
+
+ return local<double>();
+ }
+
+ /*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?>()"
+}],
+ 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';
+ }
+
+ var local2 = (o) {
+ return () => new Map<T, S>();
+ };
+ return local2(local<double>());
+ }
+
+ /*member: Class1.staticMethod1:function=[{
+ "id": "function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod1",
+ "kind": "function",
+ "name": "staticMethod1",
+ "size": 0,
+ "outputUnit": "outputUnit/main",
+ "parent": "class/memory:sdk/tests/web/native/main.dart::Class1",
+ "children": [],
+ "modifiers": {
+ "static": true,
+ "const": false,
+ "factory": false,
+ "external": false
+ },
+ "returnType": "dynamic",
+ "inferredReturnType": "[exact=_Type]",
+ "parameters": [],
+ "sideEffects": "SideEffects(reads nothing; writes nothing)",
+ "inlinedCount": 1,
+ "code": "",
+ "type": "dynamic Function<#A extends Object?>()"
+}]*/
+ static staticMethod1<S>() => S;
+ /*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?>()"
+}],
+ 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;
+ }
+
+ /*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()"
+}],
+ 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;
+ }
+
+ return local<double>();
+ }
+
+ /*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?>()"
+}],
+ 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';
+ }
+
+ var local2 = (o) {
+ return () => new Set<S>();
+ };
+ return local2(local<double>());
+ }
+}
+
+/*member: topLevelMethod1:function=[{
+ "id": "function/memory:sdk/tests/web/native/main.dart::topLevelMethod1",
+ "kind": "function",
+ "name": "topLevelMethod1",
+ "size": 0,
+ "outputUnit": "outputUnit/main",
+ "parent": "library/memory:sdk/tests/web/native/main.dart::",
+ "children": [],
+ "modifiers": {
+ "static": false,
+ "const": false,
+ "factory": false,
+ "external": false
+ },
+ "returnType": "dynamic",
+ "inferredReturnType": "[exact=_Type]",
+ "parameters": [],
+ "sideEffects": "SideEffects(reads nothing; writes nothing)",
+ "inlinedCount": 1,
+ "code": "",
+ "type": "dynamic Function<#A extends Object?>()"
+}]*/
+topLevelMethod1<S>() => S;
+
+/*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?>()"
+}],
+ 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;
+}
+
+/*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()"
+}],
+ 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;
+ }
+
+ return local<double>();
+}
+
+/*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?>()"
+}],
+ 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';
+ }
+
+ var local2 = (o) {
+ return () => new Set<S>();
+ };
+ return local2(local<double>());
+}
+
+/*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()"
+}],
+ 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;
+}
+
+/*member: main:
+ function=[{
+ "id": "function/memory:sdk/tests/web/native/main.dart::main",
+ "kind": "function",
+ "name": "main",
+ "size": 649,
+ "outputUnit": "outputUnit/main",
+ "parent": "library/memory:sdk/tests/web/native/main.dart::",
+ "children": [],
+ "modifiers": {
+ "static": false,
+ "const": false,
+ "factory": false,
+ "external": false
+ },
+ "returnType": "dynamic",
+ "inferredReturnType": "[null]",
+ "parameters": [],
+ "sideEffects": "SideEffects(reads anything; writes anything)",
+ "inlinedCount": 0,
+ "code": "main() {\n var t2,\n t1 = type$.int;\n A.createRuntimeType(A.Class1$(t1).$ti._precomputed1);\n A.Class1$(t1).method2$0();\n A.Class1_Class1$fact2(t1).funcField.call$0();\n A.Class1$(t1);\n t2 = type$.double;\n A.createRuntimeType(t2);\n A.Class1$(t1).method4$1$0(t2);\n A.Class1$(t1).method5$0();\n A.Class1$(t1).method6$1$0(t2);\n A.createRuntimeType(t2);\n A.Class1_staticMethod2(t2);\n A.Class1_staticMethod3();\n A.Class1_staticMethod4(t2);\n A.createRuntimeType(t2);\n A.topLevelMethod2(t2);\n A.topLevelMethod3();\n A.topLevelMethod4(t2);\n A.twoLocals();\n }",
+ "type": "dynamic Function()"
+}],
+ holding=[
+ {"id":"field/dart:_rti::Rti._precomputed1","mask":null},
+ {"id":"field/memory:sdk/tests/web/native/main.dart::Class1.funcField","mask":null},
+ {"id":"function/dart:_rti::createRuntimeType","mask":null},
+ {"id":"function/dart:_rti::findType","mask":null},
+ {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.Class1","mask":null},
+ {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.Class1.fact","mask":"inlined"},
+ {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.Class1.fact","mask":null},
+ {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.Class1.fact2","mask":null},
+ {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.method1","mask":"inlined"},
+ {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.method1","mask":null},
+ {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.method2","mask":null},
+ {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.method3","mask":"inlined"},
+ {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.method3","mask":null},
+ {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.method4","mask":null},
+ {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.method5","mask":null},
+ {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.method6","mask":null},
+ {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod1","mask":"inlined"},
+ {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod1","mask":null},
+ {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod2","mask":null},
+ {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod3","mask":null},
+ {"id":"function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4","mask":null},
+ {"id":"function/memory:sdk/tests/web/native/main.dart::topLevelMethod1","mask":"inlined"},
+ {"id":"function/memory:sdk/tests/web/native/main.dart::topLevelMethod1","mask":null},
+ {"id":"function/memory:sdk/tests/web/native/main.dart::topLevelMethod2","mask":null},
+ {"id":"function/memory:sdk/tests/web/native/main.dart::topLevelMethod3","mask":null},
+ {"id":"function/memory:sdk/tests/web/native/main.dart::topLevelMethod4","mask":null},
+ {"id":"function/memory:sdk/tests/web/native/main.dart::twoLocals","mask":null}]
+*/
+main() {
+ new Class1<int>().method1();
+ new Class1<int>.fact().method2();
+ new Class1<int>.fact2().funcField() is Set;
+ new Class1<int>().method3<double>();
+ new Class1<int>().method4<double>();
+ new Class1<int>().method5();
+ new Class1<int>().method6<double>();
+ Class1.staticMethod1<double>();
+ Class1.staticMethod2<double>();
+ Class1.staticMethod3();
+ Class1.staticMethod4<double>();
+ topLevelMethod1<double>();
+ topLevelMethod2<double>();
+ topLevelMethod3();
+ topLevelMethod4<double>();
+ twoLocals();
+}
diff --git a/pkg/compiler/test/dump_info/data/deferred/main.dart b/pkg/compiler/test/dump_info/data/deferred/main.dart
index 58ffa26..2bed74e 100644
--- a/pkg/compiler/test/dump_info/data/deferred/main.dart
+++ b/pkg/compiler/test/dump_info/data/deferred/main.dart
@@ -123,6 +123,15 @@
import 'lib.dart' deferred as lib;
/*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",
diff --git a/pkg/compiler/test/dump_info/dump_info_test.dart b/pkg/compiler/test/dump_info/dump_info_test.dart
index 87e0585..97d9e43 100644
--- a/pkg/compiler/test/dump_info/dump_info_test.dart
+++ b/pkg/compiler/test/dump_info/dump_info_test.dart
@@ -19,6 +19,17 @@
import '../equivalence/id_equivalence.dart';
import '../equivalence/id_equivalence_helper.dart';
+final JsonEncoder encoder = const JsonEncoder();
+final JsonEncoder indentedEncoder = const JsonEncoder.withIndent(' ');
+
+String jsonEncode(object, {bool indent = true}) {
+ var jsonEncoder = indent ? indentedEncoder : encoder;
+ // Filter block comments since they interfere with ID test comments.
+ var json =
+ jsonEncoder.convert(object).replaceAll('/*', '').replaceAll('*/', '');
+ return json;
+}
+
main(List<String> args) {
asyncTest(() async {
Directory dataDir = Directory.fromUri(Platform.script.resolve('data'));
@@ -33,6 +44,7 @@
static const String library = 'library';
static const String clazz = 'class';
static const String classType = 'classType';
+ static const String closure = 'closure';
static const String function = 'function';
static const String typeDef = 'typedef';
static const String field = 'field';
@@ -46,9 +58,6 @@
class DumpInfoDataComputer extends DataComputer<Features> {
const DumpInfoDataComputer();
- final JsonEncoder encoder = const JsonEncoder();
- final JsonEncoder indentedEncoder = const JsonEncoder.withIndent(' ');
-
static const String wildcard = '%';
@override
@@ -64,23 +73,23 @@
if (libraryInfo == null) return;
features.addElement(
- Tags.library, indentedEncoder.convert(libraryInfo.accept(converter)));
+ Tags.library, jsonEncode(libraryInfo.accept(converter)));
// Store program-wide information on the main library.
var name = '${library.canonicalUri.pathSegments.last}';
if (name.startsWith('main')) {
for (final constantInfo in dumpInfoState.info.constants) {
- features.addElement(Tags.constant,
- indentedEncoder.convert(constantInfo.accept(converter)));
+ features.addElement(
+ Tags.constant, jsonEncode(constantInfo.accept(converter)));
}
- features.addElement(Tags.dependencies,
- indentedEncoder.convert(dumpInfoState.info.dependencies));
+ features.addElement(
+ Tags.dependencies, jsonEncode(dumpInfoState.info.dependencies));
for (final outputUnit in dumpInfoState.info.outputUnits) {
- features.addElement(Tags.outputUnits,
- indentedEncoder.convert(outputUnit.accept(converter)));
+ features.addElement(
+ Tags.outputUnits, jsonEncode(outputUnit.accept(converter)));
}
- features.addElement(Tags.deferredFiles,
- indentedEncoder.convert(dumpInfoState.info.deferredFiles));
+ features.addElement(
+ Tags.deferredFiles, jsonEncode(dumpInfoState.info.deferredFiles));
}
final id = LibraryId(library.canonicalUri);
@@ -100,8 +109,7 @@
final classInfo = dumpInfoState.entityToInfo[cls];
if (classInfo == null) return;
- features.addElement(
- Tags.clazz, indentedEncoder.convert(classInfo.accept(converter)));
+ features.addElement(Tags.clazz, jsonEncode(classInfo.accept(converter)));
final classTypeInfos =
dumpInfoState.info.classTypes.where((i) => i.name == classInfo.name);
assert(
@@ -109,8 +117,8 @@
'Ambiguous class type info resolution. '
'Expected 0 or 1 elements, found: $classTypeInfos');
if (classTypeInfos.length == 1) {
- features.addElement(Tags.classType,
- indentedEncoder.convert(classTypeInfos.first.accept(converter)));
+ features.addElement(
+ Tags.classType, jsonEncode(classTypeInfos.first.accept(converter)));
}
JsClosedWorld closedWorld = compiler.backendClosedWorldForTesting;
@@ -135,20 +143,28 @@
if (functionInfo == null) return;
if (functionInfo is info.FunctionInfo) {
- features.addElement(Tags.function,
- indentedEncoder.convert(functionInfo.accept(converter)));
+ features.addElement(
+ Tags.function, jsonEncode(functionInfo.accept(converter)));
for (final use in functionInfo.uses) {
+ features.addElement(Tags.holding,
+ jsonEncode(converter.visitDependencyInfo(use), indent: false));
+ }
+ for (var closure in functionInfo.closures) {
features.addElement(
- Tags.holding, encoder.convert(converter.visitDependencyInfo(use)));
+ Tags.closure, jsonEncode(closure.accept(converter)));
}
}
if (functionInfo is info.FieldInfo) {
- features.addElement(Tags.function,
- indentedEncoder.convert(functionInfo.accept(converter)));
+ features.addElement(
+ Tags.function, jsonEncode(functionInfo.accept(converter)));
for (final use in functionInfo.uses) {
+ features.addElement(Tags.holding,
+ jsonEncode(converter.visitDependencyInfo(use), indent: false));
+ }
+ for (var closure in functionInfo.closures) {
features.addElement(
- Tags.holding, encoder.convert(converter.visitDependencyInfo(use)));
+ Tags.closure, jsonEncode(closure.accept(converter)));
}
}
@@ -201,7 +217,8 @@
if (actualValue is List) {
List actualList = actualValue.toList();
for (Object expectedObject in expectedValue) {
- String expectedText = encoder.convert(jsonDecode(expectedObject));
+ String expectedText =
+ jsonEncode(jsonDecode(expectedObject), indent: false);
bool matchFound = false;
if (wildcard != null && expectedText.endsWith(wildcard)) {
// Wildcard matcher.
@@ -210,7 +227,7 @@
List matches = [];
for (Object actualObject in actualList) {
final formattedActualObject =
- encoder.convert(jsonDecode(actualObject));
+ jsonEncode(jsonDecode(actualObject), indent: false);
if (formattedActualObject.startsWith(prefix)) {
matches.add(actualObject);
matchFound = true;
@@ -222,7 +239,7 @@
} else {
for (Object actualObject in actualList) {
final formattedActualObject =
- encoder.convert(jsonDecode(actualObject));
+ jsonEncode(jsonDecode(actualObject), indent: false);
if (expectedText == formattedActualObject) {
actualList.remove(actualObject);
matchFound = true;