[dart2js] Adding function kind info to closure call methods

Change-Id: Ibb78a41c8e414c909999591c8d667a7697af32ef
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/250147
Commit-Queue: Mark Zhou <markzipan@google.com>
Reviewed-by: Joshua Litt <joshualitt@google.com>
diff --git a/pkg/compiler/lib/src/dump_info.dart b/pkg/compiler/lib/src/dump_info.dart
index 8459ff0..18cba93 100644
--- a/pkg/compiler/lib/src/dump_info.dart
+++ b/pkg/compiler/lib/src/dump_info.dart
@@ -546,8 +546,8 @@
   FunctionInfo visitFunction(ir.FunctionNode function,
       {FunctionEntity functionEntity, LocalFunctionInfo localFunctionInfo}) {
     final parent = function.parent;
-    String name =
-        parent is ir.LocalFunction ? 'call' : parent.toStringInternal();
+    bool isClosureCallMethod = parent is ir.LocalFunction;
+    String name = isClosureCallMethod ? 'call' : parent.toStringInternal();
     bool isConstructor = parent is ir.Constructor;
     bool isFactory = parent is ir.Procedure && parent.isFactory;
     // Kernel `isStatic` refers to static members, constructors, and top-level
@@ -562,7 +562,8 @@
         !isFactory;
     bool isConst = parent is ir.Member && parent.isConst;
     bool isExternal = parent is ir.Member && parent.isExternal;
-    bool isMethod = parent is ir.Member && parent.enclosingClass != null;
+    bool isMethod = isClosureCallMethod ||
+        (parent is ir.Member && parent.enclosingClass != null);
     bool isGetter = parent is ir.Procedure && parent.isGetter;
     bool isSetter = parent is ir.Procedure && parent.isSetter;
     int kind;
diff --git a/pkg/compiler/test/dump_info/data/closures.dart b/pkg/compiler/test/dump_info/data/closures.dart
index 6eef392..817e514 100644
--- a/pkg/compiler/test/dump_info/data/closures.dart
+++ b/pkg/compiler/test/dump_info/data/closures.dart
@@ -99,7 +99,95 @@
   ]
 }]*/
 class Class1<T> {
-  /*member: Class1.field:
+  /*spec.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()"
+},
+    {
+  "id": "function/memory:sdk/tests/web/native/main.dart::Class1.field.Class1_field_closure.call",
+  "kind": "function",
+  "name": "call",
+  "size": 58,
+  "outputUnit": "outputUnit/main",
+  "parent": "closure/memory:sdk/tests/web/native/main.dart::Class1.field.Class1_field_closure",
+  "children": [],
+  "modifiers": {
+    "static": false,
+    "const": false,
+    "factory": false,
+    "external": false
+  },
+  "returnType": "Type",
+  "inferredReturnType": "[exact=_Type]",
+  "parameters": [],
+  "sideEffects": "SideEffects(reads nothing; writes nothing)",
+  "inlinedCount": 0,
+  "code": "call$0() {\n      return A.createRuntimeType(this.T);\n    }",
+  "type": "Type Function()",
+  "functionKind": 2
+}],
+   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}]
+  */
+  /*canary.member: Class1.field:
    closure=[{
   "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.field.Class1_field_closure",
   "kind": "closure",
@@ -184,7 +272,72 @@
   */
   var funcField;
 
-  /*member: Class1.:
+  /*spec.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
+},
+    {
+  "id": "function/memory:sdk/tests/web/native/main.dart::Class1.Class1.Class1_closure.call",
+  "kind": "function",
+  "name": "call",
+  "size": 58,
+  "outputUnit": "outputUnit/main",
+  "parent": "closure/memory:sdk/tests/web/native/main.dart::Class1.Class1.Class1_closure",
+  "children": [],
+  "modifiers": {
+    "static": false,
+    "const": false,
+    "factory": false,
+    "external": false
+  },
+  "returnType": "Type",
+  "inferredReturnType": "[exact=_Type]",
+  "parameters": [],
+  "sideEffects": "SideEffects(reads nothing; writes nothing)",
+  "inlinedCount": 0,
+  "code": "call$0() {\n      return A.createRuntimeType(this.T);\n    }",
+  "type": "Type Function()",
+  "functionKind": 2
+}],
+   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}]
+  */
+  /*canary.member: Class1.:
    closure=[{
   "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.Class1.Class1_closure",
   "kind": "closure",
@@ -290,7 +443,72 @@
   "functionKind": 3
 }]*/
   factory Class1.fact() => new Class1<T>();
-  /*member: Class1.fact2:
+  /*spec.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
+},
+    {
+  "id": "function/memory:sdk/tests/web/native/main.dart::Class1.Class1.fact2.Class1_Class1$fact2_closure.call",
+  "kind": "function",
+  "name": "call",
+  "size": 68,
+  "outputUnit": "outputUnit/main",
+  "parent": "closure/memory:sdk/tests/web/native/main.dart::Class1.Class1.fact2.Class1_Class1$fact2_closure",
+  "children": [],
+  "modifiers": {
+    "static": false,
+    "const": false,
+    "factory": false,
+    "external": false
+  },
+  "returnType": "Set<Class1.T>",
+  "inferredReturnType": "[subclass=_LinkedHashSet]",
+  "parameters": [],
+  "sideEffects": "SideEffects(reads anything; writes anything)",
+  "inlinedCount": 0,
+  "code": "call$0() {\n      return A.LinkedHashSet_LinkedHashSet(this.T);\n    }",
+  "type": "Set<Class1.T> Function()",
+  "functionKind": 2
+}],
+   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}]
+  */
+  /*canary.member: Class1.fact2:
    closure=[{
   "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.Class1.fact2.Class1_Class1$fact2_closure",
   "kind": "closure",
@@ -357,7 +575,71 @@
   "functionKind": 2
 }]*/
   method1() => T;
-  /*member: Class1.method2:
+  /*spec.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
+},
+    {
+  "id": "function/memory:sdk/tests/web/native/main.dart::Class1.method2.Class1_method2_closure.call",
+  "kind": "function",
+  "name": "call",
+  "size": 80,
+  "outputUnit": "outputUnit/main",
+  "parent": "closure/memory:sdk/tests/web/native/main.dart::Class1.method2.Class1_method2_closure",
+  "children": [],
+  "modifiers": {
+    "static": false,
+    "const": false,
+    "factory": false,
+    "external": false
+  },
+  "returnType": "Type",
+  "inferredReturnType": "[exact=_Type]",
+  "parameters": [],
+  "sideEffects": "SideEffects(reads nothing; writes nothing)",
+  "inlinedCount": 0,
+  "code": "call$0() {\n      return A.createRuntimeType(this.$this.$ti._precomputed1);\n    }",
+  "type": "Type 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}]
+  */
+  /*canary.member: Class1.method2:
    closure=[{
   "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.method2.Class1_method2_closure",
   "kind": "closure",
@@ -425,7 +707,71 @@
   "functionKind": 2
 }]*/
   method3<S>() => S;
-  /*member: Class1.method4:
+  /*spec.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
+},
+    {
+  "id": "function/memory:sdk/tests/web/native/main.dart::Class1.method4.Class1_method4_closure.call",
+  "kind": "function",
+  "name": "call",
+  "size": 58,
+  "outputUnit": "outputUnit/main",
+  "parent": "closure/memory:sdk/tests/web/native/main.dart::Class1.method4.Class1_method4_closure",
+  "children": [],
+  "modifiers": {
+    "static": false,
+    "const": false,
+    "factory": false,
+    "external": false
+  },
+  "returnType": "Type",
+  "inferredReturnType": "[exact=_Type]",
+  "parameters": [],
+  "sideEffects": "SideEffects(reads nothing; writes nothing)",
+  "inlinedCount": 0,
+  "code": "call$0() {\n      return A.createRuntimeType(this.S);\n    }",
+  "type": "Type Function()",
+  "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}]
+  */
+  /*canary.member: Class1.method4:
    closure=[{
   "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.method4.Class1_method4_closure",
   "kind": "closure",
@@ -469,7 +815,106 @@
     return () => S;
   }
 
-  /*member: Class1.method5:
+  /*spec.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
+},
+    {
+  "id": "function/memory:sdk/tests/web/native/main.dart::Class1.method5.Class1_method5_local.call",
+  "kind": "function",
+  "name": "call",
+  "size": 132,
+  "outputUnit": "outputUnit/main",
+  "parent": "closure/memory:sdk/tests/web/native/main.dart::Class1.method5.Class1_method5_local",
+  "children": [],
+  "modifiers": {
+    "static": false,
+    "const": false,
+    "factory": false,
+    "external": false
+  },
+  "returnType": "Type Function()",
+  "inferredReturnType": "[subclass=Closure]",
+  "parameters": [],
+  "sideEffects": "SideEffects(reads nothing; writes nothing)",
+  "inlinedCount": 0,
+  "code": "call$1$0($S) {\n      return new A.Class1_method5_local_closure($S);\n    }\ncall$0() {\n      return this.call$1$0(type$.dynamic);\n    }",
+  "type": "Type Function() Function<#A extends Object?>()",
+  "functionKind": 2
+},
+    {
+  "id": "function/memory:sdk/tests/web/native/main.dart::Class1.method5.Class1_method5_local_closure.call",
+  "kind": "function",
+  "name": "call",
+  "size": 58,
+  "outputUnit": "outputUnit/main",
+  "parent": "closure/memory:sdk/tests/web/native/main.dart::Class1.method5.Class1_method5_local_closure",
+  "children": [],
+  "modifiers": {
+    "static": false,
+    "const": false,
+    "factory": false,
+    "external": false
+  },
+  "returnType": "Type",
+  "inferredReturnType": "[exact=_Type]",
+  "parameters": [],
+  "sideEffects": "SideEffects(reads nothing; writes nothing)",
+  "inlinedCount": 0,
+  "code": "call$0() {\n      return A.createRuntimeType(this.S);\n    }",
+  "type": "Type 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}]
+  */
+  /*canary.member: Class1.method5:
    closure=[
     {
   "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.method5.Class1_method5_local",
@@ -529,7 +974,180 @@
     return local<double>();
   }
 
-  /*member: Class1.method6:
+  /*spec.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
+},
+    {
+  "id": "function/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6__closure.call",
+  "kind": "function",
+  "name": "call",
+  "size": 132,
+  "outputUnit": "outputUnit/main",
+  "parent": "closure/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6__closure",
+  "children": [],
+  "modifiers": {
+    "static": false,
+    "const": false,
+    "factory": false,
+    "external": false
+  },
+  "returnType": "Map<Class1.T,method6.S>",
+  "inferredReturnType": "[exact=JsLinkedHashMap]",
+  "parameters": [],
+  "sideEffects": "SideEffects(reads nothing; writes nothing)",
+  "inlinedCount": 0,
+  "code": "call$0() {\n      return new A.JsLinkedHashMap(this.$this.$ti._eval$1(\"@<1>\")._bind$1(this.S)._eval$1(\"JsLinkedHashMap<1,2>\"));\n    }",
+  "type": "Map<Class1.T,method6.S> Function()",
+  "functionKind": 2
+},
+    {
+  "id": "function/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6_closure.call",
+  "kind": "function",
+  "name": "call",
+  "size": 81,
+  "outputUnit": "outputUnit/main",
+  "parent": "closure/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6_closure",
+  "children": [],
+  "modifiers": {
+    "static": false,
+    "const": false,
+    "factory": false,
+    "external": false
+  },
+  "returnType": "Map<Class1.T,method6.S> Function()",
+  "inferredReturnType": "[subclass=Closure]",
+  "parameters": [
+    {
+      "name": "o",
+      "type": "[subclass=Closure]",
+      "declaredType": "dynamic"
+    }
+  ],
+  "sideEffects": "SideEffects(reads nothing; writes nothing)",
+  "inlinedCount": 0,
+  "code": "call$1(o) {\n      return new A.Class1_method6__closure(this.$this, this.S);\n    }",
+  "type": "Map<Class1.T,method6.S> Function() Function(dynamic)",
+  "functionKind": 2
+},
+    {
+  "id": "function/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6_local.call",
+  "kind": "function",
+  "name": "call",
+  "size": 140,
+  "outputUnit": "outputUnit/main",
+  "parent": "closure/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6_local",
+  "children": [],
+  "modifiers": {
+    "static": false,
+    "const": false,
+    "factory": false,
+    "external": false
+  },
+  "returnType": "String Function()",
+  "inferredReturnType": "[subclass=Closure]",
+  "parameters": [],
+  "sideEffects": "SideEffects(reads nothing; writes nothing)",
+  "inlinedCount": 0,
+  "code": "call$1$0($U) {\n      return new A.Class1_method6_local_closure(this.S, $U);\n    }\ncall$0() {\n      return this.call$1$0(type$.dynamic);\n    }",
+  "type": "String Function() Function<#A extends Object?>()",
+  "functionKind": 2
+},
+    {
+  "id": "function/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6_local_closure.call",
+  "kind": "function",
+  "name": "call",
+  "size": 116,
+  "outputUnit": "outputUnit/main",
+  "parent": "closure/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6_local_closure",
+  "children": [],
+  "modifiers": {
+    "static": false,
+    "const": false,
+    "factory": false,
+    "external": false
+  },
+  "returnType": "String",
+  "inferredReturnType": "[exact=JSString]",
+  "parameters": [],
+  "sideEffects": "SideEffects(reads nothing; writes anything)",
+  "inlinedCount": 0,
+  "code": "call$0() {\n      return A.createRuntimeType(this.S).toString$0(0) + A.createRuntimeType(this.U).toString$0(0);\n    }",
+  "type": "String 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.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}]
+  */
+  /*canary.member: Class1.method6:
    closure=[
     {
   "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.method6.Class1_method6__closure",
@@ -638,7 +1256,71 @@
   "functionKind": 0
 }]*/
   static staticMethod1<S>() => S;
-  /*member: Class1.staticMethod2:
+  /*spec.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
+},
+    {
+  "id": "function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod2.Class1_staticMethod2_closure.call",
+  "kind": "function",
+  "name": "call",
+  "size": 58,
+  "outputUnit": "outputUnit/main",
+  "parent": "closure/memory:sdk/tests/web/native/main.dart::Class1.staticMethod2.Class1_staticMethod2_closure",
+  "children": [],
+  "modifiers": {
+    "static": false,
+    "const": false,
+    "factory": false,
+    "external": false
+  },
+  "returnType": "Type",
+  "inferredReturnType": "[exact=_Type]",
+  "parameters": [],
+  "sideEffects": "SideEffects(reads nothing; writes nothing)",
+  "inlinedCount": 0,
+  "code": "call$0() {\n      return A.createRuntimeType(this.S);\n    }",
+  "type": "Type Function()",
+  "functionKind": 2
+}],
+   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}]
+  */
+  /*canary.member: Class1.staticMethod2:
    closure=[{
   "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.staticMethod2.Class1_staticMethod2_closure",
   "kind": "closure",
@@ -682,7 +1364,106 @@
     return () => S;
   }
 
-  /*member: Class1.staticMethod3:
+  /*spec.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
+},
+    {
+  "id": "function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod3.Class1_staticMethod3_local.call",
+  "kind": "function",
+  "name": "call",
+  "size": 138,
+  "outputUnit": "outputUnit/main",
+  "parent": "closure/memory:sdk/tests/web/native/main.dart::Class1.staticMethod3.Class1_staticMethod3_local",
+  "children": [],
+  "modifiers": {
+    "static": false,
+    "const": false,
+    "factory": false,
+    "external": false
+  },
+  "returnType": "Type Function()",
+  "inferredReturnType": "[subclass=Closure]",
+  "parameters": [],
+  "sideEffects": "SideEffects(reads nothing; writes nothing)",
+  "inlinedCount": 0,
+  "code": "call$1$0($S) {\n      return new A.Class1_staticMethod3_local_closure($S);\n    }\ncall$0() {\n      return this.call$1$0(type$.dynamic);\n    }",
+  "type": "Type Function() Function<#A extends Object?>()",
+  "functionKind": 2
+},
+    {
+  "id": "function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod3.Class1_staticMethod3_local_closure.call",
+  "kind": "function",
+  "name": "call",
+  "size": 58,
+  "outputUnit": "outputUnit/main",
+  "parent": "closure/memory:sdk/tests/web/native/main.dart::Class1.staticMethod3.Class1_staticMethod3_local_closure",
+  "children": [],
+  "modifiers": {
+    "static": false,
+    "const": false,
+    "factory": false,
+    "external": false
+  },
+  "returnType": "Type",
+  "inferredReturnType": "[exact=_Type]",
+  "parameters": [],
+  "sideEffects": "SideEffects(reads nothing; writes nothing)",
+  "inlinedCount": 0,
+  "code": "call$0() {\n      return A.createRuntimeType(this.S);\n    }",
+  "type": "Type 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.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",
@@ -742,7 +1523,180 @@
     return local<double>();
   }
 
-  /*member: Class1.staticMethod4:
+  /*spec.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
+},
+    {
+  "id": "function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4__closure.call",
+  "kind": "function",
+  "name": "call",
+  "size": 68,
+  "outputUnit": "outputUnit/main",
+  "parent": "closure/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4__closure",
+  "children": [],
+  "modifiers": {
+    "static": false,
+    "const": false,
+    "factory": false,
+    "external": false
+  },
+  "returnType": "Set<staticMethod4.S>",
+  "inferredReturnType": "[subclass=_LinkedHashSet]",
+  "parameters": [],
+  "sideEffects": "SideEffects(reads anything; writes anything)",
+  "inlinedCount": 0,
+  "code": "call$0() {\n      return A.LinkedHashSet_LinkedHashSet(this.S);\n    }",
+  "type": "Set<staticMethod4.S> Function()",
+  "functionKind": 2
+},
+    {
+  "id": "function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4_closure.call",
+  "kind": "function",
+  "name": "call",
+  "size": 75,
+  "outputUnit": "outputUnit/main",
+  "parent": "closure/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4_closure",
+  "children": [],
+  "modifiers": {
+    "static": false,
+    "const": false,
+    "factory": false,
+    "external": false
+  },
+  "returnType": "Set<staticMethod4.S> Function()",
+  "inferredReturnType": "[subclass=Closure]",
+  "parameters": [
+    {
+      "name": "o",
+      "type": "[subclass=Closure]",
+      "declaredType": "dynamic"
+    }
+  ],
+  "sideEffects": "SideEffects(reads nothing; writes nothing)",
+  "inlinedCount": 0,
+  "code": "call$1(o) {\n      return new A.Class1_staticMethod4__closure(this.S);\n    }",
+  "type": "Set<staticMethod4.S> Function() Function(dynamic)",
+  "functionKind": 2
+},
+    {
+  "id": "function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4_local.call",
+  "kind": "function",
+  "name": "call",
+  "size": 146,
+  "outputUnit": "outputUnit/main",
+  "parent": "closure/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4_local",
+  "children": [],
+  "modifiers": {
+    "static": false,
+    "const": false,
+    "factory": false,
+    "external": false
+  },
+  "returnType": "String Function()",
+  "inferredReturnType": "[subclass=Closure]",
+  "parameters": [],
+  "sideEffects": "SideEffects(reads nothing; writes nothing)",
+  "inlinedCount": 0,
+  "code": "call$1$0($U) {\n      return new A.Class1_staticMethod4_local_closure(this.S, $U);\n    }\ncall$0() {\n      return this.call$1$0(type$.dynamic);\n    }",
+  "type": "String Function() Function<#A extends Object?>()",
+  "functionKind": 2
+},
+    {
+  "id": "function/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4_local_closure.call",
+  "kind": "function",
+  "name": "call",
+  "size": 116,
+  "outputUnit": "outputUnit/main",
+  "parent": "closure/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4_local_closure",
+  "children": [],
+  "modifiers": {
+    "static": false,
+    "const": false,
+    "factory": false,
+    "external": false
+  },
+  "returnType": "String",
+  "inferredReturnType": "[exact=JSString]",
+  "parameters": [],
+  "sideEffects": "SideEffects(reads nothing; writes anything)",
+  "inlinedCount": 0,
+  "code": "call$0() {\n      return A.createRuntimeType(this.S).toString$0(0) + A.createRuntimeType(this.U).toString$0(0);\n    }",
+  "type": "String 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.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}]
+  */
+  /*canary.member: Class1.staticMethod4:
    closure=[
     {
   "id": "closure/memory:sdk/tests/web/native/main.dart::Class1.staticMethod4.Class1_staticMethod4__closure",
@@ -853,7 +1807,71 @@
 }]*/
 topLevelMethod1<S>() => S;
 
-/*member: topLevelMethod2:
+/*spec.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
+},
+  {
+  "id": "function/memory:sdk/tests/web/native/main.dart::topLevelMethod2.topLevelMethod2_closure.call",
+  "kind": "function",
+  "name": "call",
+  "size": 58,
+  "outputUnit": "outputUnit/main",
+  "parent": "closure/memory:sdk/tests/web/native/main.dart::topLevelMethod2.topLevelMethod2_closure",
+  "children": [],
+  "modifiers": {
+    "static": false,
+    "const": false,
+    "factory": false,
+    "external": false
+  },
+  "returnType": "Type",
+  "inferredReturnType": "[exact=_Type]",
+  "parameters": [],
+  "sideEffects": "SideEffects(reads nothing; writes nothing)",
+  "inlinedCount": 0,
+  "code": "call$0() {\n      return A.createRuntimeType(this.S);\n    }",
+  "type": "Type Function()",
+  "functionKind": 2
+}],
+ 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}]
+*/
+/*canary.member: topLevelMethod2:
  closure=[{
   "id": "closure/memory:sdk/tests/web/native/main.dart::topLevelMethod2.topLevelMethod2_closure",
   "kind": "closure",
@@ -897,7 +1915,106 @@
   return () => S;
 }
 
-/*member: topLevelMethod3:
+/*spec.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
+},
+  {
+  "id": "function/memory:sdk/tests/web/native/main.dart::topLevelMethod3.topLevelMethod3_local.call",
+  "kind": "function",
+  "name": "call",
+  "size": 133,
+  "outputUnit": "outputUnit/main",
+  "parent": "closure/memory:sdk/tests/web/native/main.dart::topLevelMethod3.topLevelMethod3_local",
+  "children": [],
+  "modifiers": {
+    "static": false,
+    "const": false,
+    "factory": false,
+    "external": false
+  },
+  "returnType": "Type Function()",
+  "inferredReturnType": "[subclass=Closure]",
+  "parameters": [],
+  "sideEffects": "SideEffects(reads nothing; writes nothing)",
+  "inlinedCount": 0,
+  "code": "call$1$0($S) {\n      return new A.topLevelMethod3_local_closure($S);\n    }\ncall$0() {\n      return this.call$1$0(type$.dynamic);\n    }",
+  "type": "Type Function() Function<#A extends Object?>()",
+  "functionKind": 2
+},
+  {
+  "id": "function/memory:sdk/tests/web/native/main.dart::topLevelMethod3.topLevelMethod3_local_closure.call",
+  "kind": "function",
+  "name": "call",
+  "size": 58,
+  "outputUnit": "outputUnit/main",
+  "parent": "closure/memory:sdk/tests/web/native/main.dart::topLevelMethod3.topLevelMethod3_local_closure",
+  "children": [],
+  "modifiers": {
+    "static": false,
+    "const": false,
+    "factory": false,
+    "external": false
+  },
+  "returnType": "Type",
+  "inferredReturnType": "[exact=_Type]",
+  "parameters": [],
+  "sideEffects": "SideEffects(reads nothing; writes nothing)",
+  "inlinedCount": 0,
+  "code": "call$0() {\n      return A.createRuntimeType(this.S);\n    }",
+  "type": "Type 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::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",
@@ -957,7 +2074,180 @@
   return local<double>();
 }
 
-/*member: topLevelMethod4:
+/*spec.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
+},
+  {
+  "id": "function/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4__closure.call",
+  "kind": "function",
+  "name": "call",
+  "size": 68,
+  "outputUnit": "outputUnit/main",
+  "parent": "closure/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4__closure",
+  "children": [],
+  "modifiers": {
+    "static": false,
+    "const": false,
+    "factory": false,
+    "external": false
+  },
+  "returnType": "Set<topLevelMethod4.S>",
+  "inferredReturnType": "[subclass=_LinkedHashSet]",
+  "parameters": [],
+  "sideEffects": "SideEffects(reads anything; writes anything)",
+  "inlinedCount": 0,
+  "code": "call$0() {\n      return A.LinkedHashSet_LinkedHashSet(this.S);\n    }",
+  "type": "Set<topLevelMethod4.S> Function()",
+  "functionKind": 2
+},
+  {
+  "id": "function/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4_closure.call",
+  "kind": "function",
+  "name": "call",
+  "size": 70,
+  "outputUnit": "outputUnit/main",
+  "parent": "closure/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4_closure",
+  "children": [],
+  "modifiers": {
+    "static": false,
+    "const": false,
+    "factory": false,
+    "external": false
+  },
+  "returnType": "Set<topLevelMethod4.S> Function()",
+  "inferredReturnType": "[subclass=Closure]",
+  "parameters": [
+    {
+      "name": "o",
+      "type": "[subclass=Closure]",
+      "declaredType": "dynamic"
+    }
+  ],
+  "sideEffects": "SideEffects(reads nothing; writes nothing)",
+  "inlinedCount": 0,
+  "code": "call$1(o) {\n      return new A.topLevelMethod4__closure(this.S);\n    }",
+  "type": "Set<topLevelMethod4.S> Function() Function(dynamic)",
+  "functionKind": 2
+},
+  {
+  "id": "function/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4_local.call",
+  "kind": "function",
+  "name": "call",
+  "size": 141,
+  "outputUnit": "outputUnit/main",
+  "parent": "closure/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4_local",
+  "children": [],
+  "modifiers": {
+    "static": false,
+    "const": false,
+    "factory": false,
+    "external": false
+  },
+  "returnType": "String Function()",
+  "inferredReturnType": "[subclass=Closure]",
+  "parameters": [],
+  "sideEffects": "SideEffects(reads nothing; writes nothing)",
+  "inlinedCount": 0,
+  "code": "call$1$0($U) {\n      return new A.topLevelMethod4_local_closure(this.S, $U);\n    }\ncall$0() {\n      return this.call$1$0(type$.dynamic);\n    }",
+  "type": "String Function() Function<#A extends Object?>()",
+  "functionKind": 2
+},
+  {
+  "id": "function/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4_local_closure.call",
+  "kind": "function",
+  "name": "call",
+  "size": 116,
+  "outputUnit": "outputUnit/main",
+  "parent": "closure/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4_local_closure",
+  "children": [],
+  "modifiers": {
+    "static": false,
+    "const": false,
+    "factory": false,
+    "external": false
+  },
+  "returnType": "String",
+  "inferredReturnType": "[exact=JSString]",
+  "parameters": [],
+  "sideEffects": "SideEffects(reads nothing; writes anything)",
+  "inlinedCount": 0,
+  "code": "call$0() {\n      return A.createRuntimeType(this.S).toString$0(0) + A.createRuntimeType(this.U).toString$0(0);\n    }",
+  "type": "String 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::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}]
+*/
+/*canary.member: topLevelMethod4:
  closure=[
   {
   "id": "closure/memory:sdk/tests/web/native/main.dart::topLevelMethod4.topLevelMethod4__closure",
@@ -1042,7 +2332,107 @@
   return local2(local<double>());
 }
 
-/*member: twoLocals:
+/*spec.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
+},
+  {
+  "id": "function/memory:sdk/tests/web/native/main.dart::twoLocals.twoLocals_local1.call",
+  "kind": "function",
+  "name": "call",
+  "size": 16,
+  "outputUnit": "outputUnit/main",
+  "parent": "closure/memory:sdk/tests/web/native/main.dart::twoLocals.twoLocals_local1",
+  "children": [],
+  "modifiers": {
+    "static": false,
+    "const": false,
+    "factory": false,
+    "external": false
+  },
+  "returnType": "Null",
+  "inferredReturnType": "[null]",
+  "parameters": [],
+  "sideEffects": "SideEffects(reads nothing; writes nothing)",
+  "inlinedCount": 0,
+  "code": "call$0() {\n    }",
+  "type": "Null Function()",
+  "functionKind": 2
+},
+  {
+  "id": "function/memory:sdk/tests/web/native/main.dart::twoLocals.twoLocals_local2.call",
+  "kind": "function",
+  "name": "call",
+  "size": 51,
+  "outputUnit": "outputUnit/main",
+  "parent": "closure/memory:sdk/tests/web/native/main.dart::twoLocals.twoLocals_local2",
+  "children": [],
+  "modifiers": {
+    "static": false,
+    "const": false,
+    "factory": false,
+    "external": false
+  },
+  "returnType": "Null",
+  "inferredReturnType": "[null]",
+  "parameters": [],
+  "sideEffects": "SideEffects(reads nothing; writes nothing)",
+  "inlinedCount": 0,
+  "code": "call$0() {\n      return this.local1.call$0();\n    }",
+  "type": "Null Function()",
+  "functionKind": 2
+}],
+ 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}]
+*/
+/*canary.member: twoLocals:
  closure=[
   {
   "id": "closure/memory:sdk/tests/web/native/main.dart::twoLocals.twoLocals_local1",
@@ -1101,7 +2491,105 @@
   return local2;
 }
 
-/*member: nested:
+/*spec.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
+},
+  {
+  "id": "function/memory:sdk/tests/web/native/main.dart::nested.nested_nested1.call",
+  "kind": "function",
+  "name": "call",
+  "size": 74,
+  "outputUnit": "outputUnit/main",
+  "parent": "closure/memory:sdk/tests/web/native/main.dart::nested.nested_nested1",
+  "children": [],
+  "modifiers": {
+    "static": false,
+    "const": false,
+    "factory": false,
+    "external": false
+  },
+  "returnType": "Null",
+  "inferredReturnType": "[null]",
+  "parameters": [],
+  "sideEffects": "SideEffects(reads nothing; writes nothing)",
+  "inlinedCount": 0,
+  "code": "call$0() {\n      this._box_0.x = new A.nested_nested1_nested2(this);\n    }",
+  "type": "Null Function()",
+  "functionKind": 2
+},
+  {
+  "id": "function/memory:sdk/tests/web/native/main.dart::nested.nested_nested1_nested2.call",
+  "kind": "function",
+  "name": "call",
+  "size": 43,
+  "outputUnit": "outputUnit/main",
+  "parent": "closure/memory:sdk/tests/web/native/main.dart::nested.nested_nested1_nested2",
+  "children": [],
+  "modifiers": {
+    "static": false,
+    "const": false,
+    "factory": false,
+    "external": false
+  },
+  "returnType": "dynamic Function()",
+  "inferredReturnType": "[subclass=Closure]",
+  "parameters": [],
+  "sideEffects": "SideEffects(reads nothing; writes nothing)",
+  "inlinedCount": 0,
+  "code": "call$0() {\n      return this.nested1;\n    }",
+  "type": "dynamic Function() Function()",
+  "functionKind": 2
+}],
+ 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}]
+*/
+/*canary.member: nested:
  closure=[
   {
   "id": "closure/memory:sdk/tests/web/native/main.dart::nested.nested_nested1",
@@ -1163,7 +2651,139 @@
   x();
 }
 
-/*member: nested2:
+/*spec.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
+},
+  {
+  "id": "function/memory:sdk/tests/web/native/main.dart::nested2.nested2_local1.call",
+  "kind": "function",
+  "name": "call",
+  "size": 70,
+  "outputUnit": "outputUnit/main",
+  "parent": "closure/memory:sdk/tests/web/native/main.dart::nested2.nested2_local1",
+  "children": [],
+  "modifiers": {
+    "static": false,
+    "const": false,
+    "factory": false,
+    "external": false
+  },
+  "returnType": "int",
+  "inferredReturnType": "[subclass=JSInt]",
+  "parameters": [],
+  "sideEffects": "SideEffects(reads anything; writes anything)",
+  "inlinedCount": 0,
+  "code": "call$0() {\n      return new A.nested2_local1_closure().call$0();\n    }",
+  "type": "int Function()",
+  "functionKind": 2
+},
+  {
+  "id": "function/memory:sdk/tests/web/native/main.dart::nested2.nested2_local1__closure.call",
+  "kind": "function",
+  "name": "call",
+  "size": 32,
+  "outputUnit": "outputUnit/main",
+  "parent": "closure/memory:sdk/tests/web/native/main.dart::nested2.nested2_local1__closure",
+  "children": [],
+  "modifiers": {
+    "static": false,
+    "const": false,
+    "factory": false,
+    "external": false
+  },
+  "returnType": "int",
+  "inferredReturnType": "[exact=JSUInt31]",
+  "parameters": [],
+  "sideEffects": "SideEffects(reads nothing; writes nothing)",
+  "inlinedCount": 0,
+  "code": "call$0() {\n      return 2;\n    }",
+  "type": "int Function()",
+  "functionKind": 2
+},
+  {
+  "id": "function/memory:sdk/tests/web/native/main.dart::nested2.nested2_local1_closure.call",
+  "kind": "function",
+  "name": "call",
+  "size": 154,
+  "outputUnit": "outputUnit/main",
+  "parent": "closure/memory:sdk/tests/web/native/main.dart::nested2.nested2_local1_closure",
+  "children": [],
+  "modifiers": {
+    "static": false,
+    "const": false,
+    "factory": false,
+    "external": false
+  },
+  "returnType": "int",
+  "inferredReturnType": "[subclass=JSInt]",
+  "parameters": [],
+  "sideEffects": "SideEffects(reads anything; writes anything)",
+  "inlinedCount": 0,
+  "code": "call$0() {\n      var t1 = new A.nested2_local1__closure().call$0();\n      if (typeof t1 !== \"number\")\n        return A.iae(t1);\n      return 1 + t1;\n    }",
+  "type": "int Function()",
+  "functionKind": 2
+}],
+ 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}]
+*/
+/*canary.member: nested2:
  closure=[
   {
   "id": "closure/memory:sdk/tests/web/native/main.dart::nested2.nested2_local1",
@@ -1235,7 +2855,139 @@
   print(y);
 }
 
-/*member: siblings:
+/*spec.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
+},
+  {
+  "id": "function/memory:sdk/tests/web/native/main.dart::siblings.siblings_local1.call",
+  "kind": "function",
+  "name": "call",
+  "size": 115,
+  "outputUnit": "outputUnit/main",
+  "parent": "closure/memory:sdk/tests/web/native/main.dart::siblings.siblings_local1",
+  "children": [],
+  "modifiers": {
+    "static": false,
+    "const": false,
+    "factory": false,
+    "external": false
+  },
+  "returnType": "int",
+  "inferredReturnType": "[subclass=JSInt]",
+  "parameters": [],
+  "sideEffects": "SideEffects(reads anything; writes anything)",
+  "inlinedCount": 0,
+  "code": "call$0() {\n      return new A.siblings_local1_closure().call$0() + new A.siblings_local1_closure0().call$0();\n    }",
+  "type": "int Function()",
+  "functionKind": 2
+},
+  {
+  "id": "function/memory:sdk/tests/web/native/main.dart::siblings.siblings_local1_closure.call",
+  "kind": "function",
+  "name": "call",
+  "size": 32,
+  "outputUnit": "outputUnit/main",
+  "parent": "closure/memory:sdk/tests/web/native/main.dart::siblings.siblings_local1_closure",
+  "children": [],
+  "modifiers": {
+    "static": false,
+    "const": false,
+    "factory": false,
+    "external": false
+  },
+  "returnType": "int",
+  "inferredReturnType": "[exact=JSUInt31]",
+  "parameters": [],
+  "sideEffects": "SideEffects(reads nothing; writes nothing)",
+  "inlinedCount": 0,
+  "code": "call$0() {\n      return 1;\n    }",
+  "type": "int Function()",
+  "functionKind": 2
+},
+  {
+  "id": "function/memory:sdk/tests/web/native/main.dart::siblings.siblings_local1_closure.call%0",
+  "kind": "function",
+  "name": "call",
+  "size": 32,
+  "outputUnit": "outputUnit/main",
+  "parent": "closure/memory:sdk/tests/web/native/main.dart::siblings.siblings_local1_closure%0",
+  "children": [],
+  "modifiers": {
+    "static": false,
+    "const": false,
+    "factory": false,
+    "external": false
+  },
+  "returnType": "int",
+  "inferredReturnType": "[exact=JSUInt31]",
+  "parameters": [],
+  "sideEffects": "SideEffects(reads nothing; writes nothing)",
+  "inlinedCount": 0,
+  "code": "call$0() {\n      return 3;\n    }",
+  "type": "int Function()",
+  "functionKind": 2
+}],
+ 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}]
+*/
+/*canary.member: siblings:
  closure=[
   {
   "id": "closure/memory:sdk/tests/web/native/main.dart::siblings.siblings_local1",
diff --git a/pkg/compiler/test/dump_info/data/deferred/main.dart b/pkg/compiler/test/dump_info/data/deferred/main.dart
index 4baf1e1..2ab399c 100644
--- a/pkg/compiler/test/dump_info/data/deferred/main.dart
+++ b/pkg/compiler/test/dump_info/data/deferred/main.dart
@@ -121,7 +121,80 @@
 
 import 'lib.dart' deferred as lib;
 
-/*member: main:
+/*spec.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
+},
+  {
+  "id": "function/memory:sdk/tests/web/native/main.dart::main.main_closure.call",
+  "kind": "function",
+  "name": "call",
+  "size": 84,
+  "outputUnit": "outputUnit/main",
+  "parent": "closure/memory:sdk/tests/web/native/main.dart::main.main_closure",
+  "children": [],
+  "modifiers": {
+    "static": false,
+    "const": false,
+    "factory": false,
+    "external": false
+  },
+  "returnType": "Null",
+  "inferredReturnType": "[null]",
+  "parameters": [
+    {
+      "name": "_",
+      "type": "[null|subclass=Object]",
+      "declaredType": "dynamic"
+    }
+  ],
+  "sideEffects": "SideEffects(reads anything; writes anything)",
+  "inlinedCount": 0,
+  "code": "call$1(_) {\n      A.checkDeferredIsLoaded(\"lib\");\n      C.C_Deferred.call$0();\n    }",
+  "type": "Null Function(dynamic)",
+  "functionKind": 2
+}],
+ 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}]
+*/
+/*canary.member: main:
  closure=[{
   "id": "closure/memory:sdk/tests/web/native/main.dart::main.main_closure",
   "kind": "closure",
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 b9fea3b..51ce89b 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
@@ -356,7 +356,8 @@
   "parent": "function/memory:sdk/tests/web/native/main.dart::main",
   "function": "function/memory:sdk/tests/web/native/main.dart::main.main_closure.call"
 }],
- function=[{
+ function=[
+  {
   "id": "function/memory:sdk/tests/web/native/main.dart::main",
   "kind": "function",
   "name": "main",
@@ -380,6 +381,29 @@
   "code": "main() {\n      var s = new A.Subclass();\n      A.Clazz.prototype.get$method.call(s).call$1(0);\n      A.Expect_throws(new A.main_closure(s), type$.legacy_Object);\n    }",
   "type": "dynamic Function()*",
   "functionKind": 0
+},
+  {
+  "id": "function/memory:sdk/tests/web/native/main.dart::main.main_closure.call",
+  "kind": "function",
+  "name": "call",
+  "size": 71,
+  "outputUnit": "outputUnit/main",
+  "parent": "closure/memory:sdk/tests/web/native/main.dart::main.main_closure",
+  "children": [],
+  "modifiers": {
+    "static": false,
+    "const": false,
+    "factory": false,
+    "external": false
+  },
+  "returnType": "void",
+  "inferredReturnType": "[null]",
+  "parameters": [],
+  "sideEffects": "SideEffects(reads nothing; writes nothing)",
+  "inlinedCount": 0,
+  "code": "call$0() {\n      return this.s.super$Mixin$method(A._asIntS(\"\"));\n    }",
+  "type": "void Function()",
+  "functionKind": 2
 }],
  holding=[
   {"id":"function/dart:_js_helper::closureFromTearOff","mask":null},
diff --git a/pkg/compiler/test/dump_info/dump_info_new_regression_test.dart b/pkg/compiler/test/dump_info/dump_info_new_regression_test.dart
index baae6e9..5699d15 100644
--- a/pkg/compiler/test/dump_info/dump_info_new_regression_test.dart
+++ b/pkg/compiler/test/dump_info/dump_info_new_regression_test.dart
@@ -60,7 +60,7 @@
     }
 
     // Remove disambiguation portions of names. E.g., name%N -> name.
-    if (key == 'id' || key == 'name' || key == 'function') {
+    if (key == 'id' || key == 'name' || key == 'function' || key == 'parent') {
       newValue = value.replaceAll(RegExp(r'%\d+'), '');
     } else if (key == 'children') {
       List values = object[key];
@@ -214,6 +214,8 @@
       for (final closure in functionInfo.closures) {
         features.addElement(
             Tags.closure, jsonEncode(closure.accept(converter)));
+        features.addElement(
+            Tags.function, jsonEncode(closure.function.accept(converter)));
       }
     }
 
@@ -227,6 +229,8 @@
       for (final closure in functionInfo.closures) {
         features.addElement(
             Tags.closure, jsonEncode(closure.accept(converter)));
+        features.addElement(
+            Tags.function, jsonEncode(closure.function.accept(converter)));
       }
     }
 
diff --git a/pkg/compiler/test/dump_info/dump_info_new_test.dart b/pkg/compiler/test/dump_info/dump_info_new_test.dart
index 97c9595..9599f1a 100644
--- a/pkg/compiler/test/dump_info/dump_info_new_test.dart
+++ b/pkg/compiler/test/dump_info/dump_info_new_test.dart
@@ -165,6 +165,8 @@
       for (final closure in functionInfo.closures) {
         features.addElement(
             Tags.closure, jsonEncode(closure.accept(converter)));
+        features.addElement(
+            Tags.function, jsonEncode(closure.function.accept(converter)));
       }
     }
 
@@ -178,6 +180,8 @@
       for (final closure in functionInfo.closures) {
         features.addElement(
             Tags.closure, jsonEncode(closure.accept(converter)));
+        features.addElement(
+            Tags.function, jsonEncode(closure.function.accept(converter)));
       }
     }
 
diff --git a/pkg/compiler/test/dump_info/dump_info_test.dart b/pkg/compiler/test/dump_info/dump_info_test.dart
index 1b3c017..3059465 100644
--- a/pkg/compiler/test/dump_info/dump_info_test.dart
+++ b/pkg/compiler/test/dump_info/dump_info_test.dart
@@ -163,6 +163,8 @@
       for (final closure in functionInfo.closures) {
         features.addElement(
             Tags.closure, jsonEncode(closure.accept(converter)));
+        features.addElement(
+            Tags.function, jsonEncode(closure.function.accept(converter)));
       }
     }
 
@@ -176,6 +178,8 @@
       for (final closure in functionInfo.closures) {
         features.addElement(
             Tags.closure, jsonEncode(closure.accept(converter)));
+        features.addElement(
+            Tags.function, jsonEncode(closure.function.accept(converter)));
       }
     }